找回密码
 立即注册
查看: 289|回复: 1

程序从 8A8K64S4A12 移植到 8A8K64D4

[复制链接]
  • 打卡等级:常住居民II
  • 打卡总天数:95
  • 最近打卡:2025-05-01 09:02:58
已绑定手机

5

主题

66

回帖

228

积分

中级会员

积分
228
发表于 2025-1-12 10:21:52 | 显示全部楼层 |阅读模式
在产品中应用到 8A8K64S4A12单片机具备多路PWM、多路ADC等功能,适合进行GPIO操作、ADC采样等多种实验。
咨询厂家建议使用更强大的 8A8K64D4 代替 8A8K64S4A12单片机。

将8A8K64S4A12的程序直接写入8A8K64D4,是不能跑起来的。
仔细对比两种芯片的手册,发现差别不大。对比例程,发现头文件的差别很大。
在产品的程序主要涉及串口通信、定时器和IO输入输出控制。下面一步一步来进行移植。

首先
替换所引用单片机对应型号的头文件
由#include    "AI8xxxx.h"替换为#include    "AI8A8K64D4.h"

其次
串口移植,以串口1为例进行说明
    #include "USART.h"替换为#include "STC8A_UART.h"
其中有些结构体的定义有区别,需要一一改正
截图202501121010218844.jpg

另外,AI64S4A12与64D4的同名函数和宏定义修改如下
函数USART_Configuration();        改为   UART_Configuration();
端口的宏定义由USART1改为UART1
上图提识编译错误
NVIC_UART1_Init()在#include "STC8A_NVIC.h"中
UART1_SW()在#include "STC8A_Switch.h"  中
需要调用这两个头文件,解决该问题。

再次
定时器的移植,以timer0为例
更换头文件将#include        "Timer.h"  更换为#include        "AI8A_Timer.h"
重新编译会出错如下图
截图202501121016155525.jpg
将函数中的中断使能和优先级更换为如下函数,解决编译错误
NVIC_Timer0_Init(ENABLE,Priority_0);                //中断使能, ENABLE/DISABLE; 优先级(低到高) Priority_0,Priority_1,Priority_

最后,就是冲映射端口,比如usart用到的端口。
voidGPIO_config(void)
{
GPIO_InitTypeDefGPIO_InitStructure;//结构定义
GPIO_InitStructure.Pin  = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7;//指定要初始化的IO, GPIO_Pin_0 ~ GPIO_Pin_7
GPIO_InitStructure.Mode = GPIO_PullUp;//指定IO的输入或输出方式,GPIO_PullUp,GPIO_HighZ,GPIO_OUT_OD,GPIO_OUT_PP

GPIO_Inilize(GPIO_P0,&GPIO_InitStructure);//初始化

}


到这里
我的产品用到的资源的移植就基本结束了
重新编译
成功,没有错误
下载到64D4中测试
运行正常,至此移植结束



1 喜欢他/她就送朵鲜花吧,赠人玫瑰,手有余香!
学习
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看II
  • 打卡总天数:26
  • 最近打卡:2025-02-02 05:15:26
已绑定手机

1

主题

46

回帖

99

积分

注册会员

积分
99
发表于 2025-1-13 10:52:38 | 显示全部楼层
是不是老刘示波器也可以?
回复 支持 反对

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-2 10:59 , Processed in 0.139275 second(s), 58 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表