#1国产芯片BAT32不用中断实现定时器模拟串口发送
·
因硬件设计需要用到模拟IO实现串口IAP,这个芯片是cortexM0+内核,想要实现IO模拟串口,得先知道UART电平协议,这个具体就不细讲自己搜,重点是记录我第一次用定时器方式来实现不靠中断进行精准延迟完成UART电平协议。
思路是在delay函数中开启一个定时器的计数器(systick可能需要作为OS的时钟所以建议用其它定时器),然后要注意计数器是向上还是向下计数,根据定时器的主频计算出每秒的计数时间。
开始干货,我给TIM3分配64Mhz的主频,那每计数1次就是1/64000000 = 15.625ns,而当UART波特率设置为9600时,每一帧数据的延迟时间为104us,那实现us级延迟就需要算出1us需要多少次计数时间,查阅BAT32A233可知TIM3的最大计数值为65535,向上计数,那么延迟函数中1us * 1000 / 15.625 = 64次/us,然后开启计数器,while中读取计数值直到超出x us对应的x次,然后停止计数器,这样就完成了精准延迟,最后根据UART电平协议拉低或拉高引脚就行了。
这样可以避免使用微妙级的中断,过于频繁进出中断可能会影响一些数据传输导致乱码,并且IAP在设置堆栈指针等也可以避免被打断出现错误
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐
所有评论(0)