AT32F403A, XMC, SPIM, LVGL, 图片, SPIM存储意外擦除的BUG原因与解决
写在前面:
XMC初始化时添加:
gpio_pin_remap_config(XMC_NADV_MUX, TRUE);
1、环境:
IAR, LVGLv8, ILI9488, W25Q32, XMC, AT32F403A-LQFP100
2、现像描述:
1)关键代码如下:
system_clock_config();
nvic_priority_group_config(NVIC_PRIORITY_GROUP_4);
delay_init();
dG_Flash0.pf_Config();
spim_init();
lv_obj_t* img1 = lv_img_create(lv_scr_act());
lv_img_set_src(img1, &_book_alpha_50x50);
lv_obj_set_style_bg_color(img1, lv_color_make(0, 0xff, 0), 0);
lv_obj_set_size(img1, 50, 50);
lv_obj_set_pos(img1, 0, 0);
while(1){
lv_task_handler();
}
图片是存储在W25Q32里的位置0x08400000,通过QSPI访问。
2)现像如下:
当运行到spim_init(); 后,可以通过IAR的调试得到数据如下

初始化前

初始化后
当运行到lv_task_handler();也就是,运行完后,数据如下:

使用w25q64为ff,使用w25q32为乱码

3)、问题查找
已经能够确定不是显示驱动,因为能正常画按键。
程序最开始是调试的SPIM,能够正常运行。后来使用XMC与SPIM就出现问题。
单步调试时,只出现过一次正常显示图片的上边一点点,猜测为硬件问题。
查找硬件原理图如下:
官方推荐硬件图如下AN0042_AT32_SPIM_Application_Note_ZH_V2.0.0.pdf (arterytek.com):

修改电路后如下:

测试后,问题依然存在。
此时继续各种调试,没有发现有用的现像。问题到此卡住。不过依然怀疑与XMC有关。
通过网络搜索得到 AN0024,
PB7做为XMC的NADV共用(都为PB7),存在数据冲突。
使用gpio_pin_remap_config(XMC_NADV_MUX, TRUE);将XMC_NADV转为复用功能后恢复正常。

到此问题解决。
3、值得注意的是,外部SPIM还会影响单片机的时钟频率:
查询DS得到如下:

4、总结
AT32F403A的XMC与SPIM共用时存在引脚冲突(PB7),在初始化XMC时加上此句gpio_pin_remap_config(XMC_NADV_MUX, TRUE);
以解决利用问题。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐


所有评论(0)