#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在设置堆栈指针等也可以避免被打断出现错误
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)