761 字
2 分钟
sed_control电赛控制库实现
Waiting for api.github.com...
NOTE目前主要更新ti_m0g3507相关实现
说明
- 所有库文件使用cpp17以上版本才可以通过编译
- 所有库使用已在每个库下的README.md中说明,本博客主要记录写代码时遇到的问题及相关解决方案
配置外部时钟导致单片机无法启动
应该是ti_m0g3507的bug或者官方代码没有考虑到位导致的问题,需要在时钟树选择外部高速晶振选项将HFXT Startup Time选项调为10,也就是延时晶振起振时间。
空闲中断异常
原因是ti或者说大部分带有fifo的单片机空闲中断要求总线空闲同时fifo不为空,如果接收不定长消息的长度恰好是fifo缓存的整数倍就会导致fifo为空而无法触发空闲中断,也就是说stm32中使用空闲中断配合dma实现串口不定长接收的思路在m0g3507中是走不通的。
DMA事件无法启用
对应的中断没有打开。
中断进不去或者中断导致单片机卡死
- 中断没有触发或者没有在syscfg中打开。
- 中断IRQ函数名写错了。
- 中断内部switch_case对应的中断宏定义错误。
需要说明的是:
- 捕获中断的UP和DOWN就是对应了计数方向,不是捕获边沿的选择,是计数方向的选择!
SPI片选说明
ti要求必须有一个硬件托管的片选,但是ti硬件片选的逻辑是fifo不为空时拉低,这意味着如果使用fifo那么m0最大fifo深度为4,也就是说硬件片选在不使用dma的情况下一次只能发送最多4字节消息,否则会因为CS不断被拉低拉高导致中间的信息中断。官方明确说明,如果长度大于4字节需要使用dma,代码中未激活dma的场景是使用软件CS代替的。
cmsisdsp库引入问题
使用syscfg引入cmsisdsp库,但是引入后编译器不会自动链接,需要手动包含路径。
定时器方向
由于m0的定时器中断是置零中断,所以默认使用下降计数模式,包括编码器模式。
ADC配置完成后没有读取值
注意syscfg默认的sampletime实际是0,需要自己配置一下,注意正常情况下即使默认sampletime配置为0,MEM配置每个通道时仍然会显示一个时间,因为那个是两个时间的和,即使一个为0,另一个也会存在。
ADC只会读取一个值
注意syscfg只在开启扫描模式时才可以读取多个adc的值,否则只会读第一个值,即使使能了多个MEM
分享
如果这篇文章对你有帮助,欢迎分享给更多人!
sed_control电赛控制库实现
https://mizuki.mysqil.com/posts/sed_control电赛控制库实现/ 部分信息可能已经过时





