第七章AT32F403A替换stm32f103 flash模拟eep读写测试
前言
此文章是使用AT32F403A的开发板去跑stm32f103的flash读写代码的测试情况。
硬件
硬件方面使用的是雅特力官方发布的AT32F403A开发板,开发板上面还板载了一个ATLINK_EZ的仿真器,ATLINK_EZ还有一个串口的功能,硬件上是接到了MCU的串口1上。这个ATLINK_EZ可以掰下来使用。
如下图是开发板pcb图(左边的就是ATLINK_EZ):
如果仿真工具使用的是jlink的,那可以使用jtag或者swd接口就可以,根据开发板的电路接好线即可。
由于atlink_ez自带了串口,并且是接到了串口1的,所以不需要通过ch340等工具了。Usb线接到atlink上就行。(win10以上的不需要安装atlink的串口驱动,win10以下的需要安装。驱动包在ICP工具的下载包里面有。)
软件
测试使用的软件是stm32f103的3.5标准库的工程代码。想快速验证的可以下正点、野火等的代码回来再根据自己外设的硬件的设计稍微修改就可以进行测试,就是库是stm32F103的3.5标准库的。
软件相关部分:
直接使用的stm32的flash的读写驱动,随便找个FLASH模拟EEP的例程都会有。驱动代码主要的逻辑就是先读出对应地址所在页的所有数据,判断是否需要擦除,当有有效数据的则需要擦除,擦除是以每页为单位的,擦完后,把读出的数据再写回去,这样写过的数据就不会丢失了。相关代码如下:(驱动代码网上搜就可以)
int main(void)
{
u16 i=0;
u8 readtemp[LEN];
u8 writedata[LEN];
delay_init(); //延时函数初始化
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置中断优先级分组为组2:2位抢占优先级,2位响应优先级
uart1_init(115200); //串口初始化为115200
printf("AT32F403A 替换 SXX32 flash读写 测试!!\r\n");
for(i=0;i<LEN;i++) //赋值0-99
{
writedata[i]=i;
}
STMFLASH_Write(FLASH_ADDR,(u16*)writedata,LEN);
STMFLASH_Read(FLASH_ADDR,(u16*)readtemp,LEN);
for(i=0;i<LEN;i++)
{
printf ("%d ",readtemp[i]);
}
for(i=0;i<LEN;i++)
{
readtemp[i]=0;
}
while(1)
{
}
}
测试结果
通过看串口助手的log,程序已经运行起来,读出的值和我们写入的值是一样的:
总结
从测试来看,AT32F403A是可以直接的跑stm32f103的flash读写的代码,在使用上一致。
需要注意的就是AT32F403A的flash的擦写相对比较慢,当有窗户看门狗功能是就需要注意擦除时间慢可能导致没能及时喂狗导致的重启了。
AT32F403A的有零等待内存,在零等待区域的代码在擦除flash的时候是可以响应中断的,而st的在擦除flash的时候是不能响应中断的。由于零等待内存的原因,代码的执行速度在相同的主频下AT32的也是更快的,所以使用硬延迟(通过计数来做的延迟)的时间必st的时间会小。
本文仅供于学习、测试使用。
有什么问题的可加qq群技术交流。
资源: