之前在其他品牌芯片上的模拟串口代码正常使用,移植至apm芯片上表现为不稳定,偶尔会有丢包或数据错乱问题,主频为120M,定时器配置如下:
RCM EnableAPBlPeriphClock (RCM APB1 PERIPH TMR2);
TMR BaseConfigStruct .clockDivisionTuR BaseConfiostruct .countMode
= TMR CLOCK DIV 1:4TMR COUNTER MODE UP:
TMR BaseConfigStruct .division
SystemCoreClock/3/1000000-1: //3us:"//9600 //采集"149:
//Timeset[TimeRecvstartstepl]: //9600{149,29,29, 251, 311 },
TMR BaseConfigstruct .period
TMR BaseConfiostruct.repetitionCounter=o:
TNR ConfigTimeBase (TMR2,6TMR BaseConfigStruct):
TMR EnableInterrupt (TMR2,TMR INT UPDATE) :
NVIC EnableIRORequest (TMR2 IROn, 1, 0):
模拟串口需要定时采集io的电平来判断当前的数值从而完成串口通信,之前配置为170,29,29,50us读取电平,经测试,修改为150,39,39,50us后测试ok。
以上为定时器方式的模拟串口,模拟串口也可用软件延时来实现,经测试,在主频相同的情况下,for循环,while循环实际运行的时间略有不同,需要根据延时时间的比例进行相应的调整,此问题在软件模拟iic上基本上必会发生,所以必须进行调整
|