- 打卡等级:常住居民II
- 打卡总天数:95
- 最近打卡:2025-05-01 09:02:58
已绑定手机
中级会员
- 积分
- 228
|
在产品中应用到 8A8K64S4A12单片机具备多路PWM、多路ADC等功能,适合进行GPIO操作、ADC采样等多种实验。
咨询厂家建议使用更强大的 8A8K64D4 代替 8A8K64S4A12单片机。
将8A8K64S4A12的程序直接写入8A8K64D4,是不能跑起来的。
仔细对比两种芯片的手册,发现差别不大。对比例程,发现头文件的差别很大。
在产品的程序主要涉及串口通信、定时器和IO输入输出控制。下面一步一步来进行移植。
首先
替换所引用单片机对应型号的头文件
由#include "AI8xxxx.h"替换为#include "AI8A8K64D4.h"
其次
串口移植,以串口1为例进行说明
#include "USART.h"替换为#include "STC8A_UART.h"
其中有些结构体的定义有区别,需要一一改正
另外,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"
重新编译会出错如下图
将函数中的中断使能和优先级更换为如下函数,解决编译错误
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
喜欢他/她就送朵鲜花吧,赠人玫瑰,手有余香!
-
+1
楼主威武~
|