N32 系列 MCU 用 C 语言写中断相关代码时,容易忽略的几个细节整理如下:
1. 中断服务函数名要与启动文件中的向量表符号严格一致,大小写都不能错;名字写错时编译不会报错,但中断***不响应。
2. 做向量表重定向(Bootloader 或固件升级场景)时,除了改 SCB 的 VTOR 寄存器,还要保证重定向地址按表大小对齐。
3. 主循环与中断共享的全局变量必须加 volatile;如果变量宽度大于机器字长,或者存在读-改-写操作,还要额外用临界区保护。
4. 在中断里调用打印、延时一类阻塞函数是大忌,会导致其他中断被长时间挂起;需要传递数据时用环形缓冲,主循环里再处理。
5. 配置时钟和外设时注意先开时钟再访问寄存器,顺序颠倒会出现写入无效的现象。
以上,供参考。 |