STM32L15系列IO模拟串口失败,请教

2019-07-20 23:03发布

本帖最后由 猜不透亻尔心 于 2019-3-21 09:42 编辑

最近在做一个项目,因为需要用到多个串口,硬件串口就显得不够用了,所以 就打起了IO口模拟串口的主意,然后通过将IO口设置为下降沿中断来捕获串口传送开始的信号于是做了入图的配置,之所以设置为下拉,是因为我发现,如果设置为上拉,如果是因为不小心触发的中断则会导致接收到 FF 的数据,而且这样也并不会影响到下降沿中断的触发。
然后也是最重要的就是IO口时序的模拟接收了,根据波特率定时查看IO口状态并进行记录程序如下(使用HAL库编写,CUBEMX 进行配置):这个时候问题就出来了,数据总是不能正确接收,delay_us的延时是通过定时器实现的,这个延时同时也在模拟I2C接口中有用到,系统时钟和定时器配置如下
时钟配置为内部MSI  2M频率,不分频,则外设时钟和系统定时器都应该同样是2M频率TIM6的TIME_OUT = (period+1)/(prescaler+1)/clock = 2 / 1 / 2 = 1us ;  这里的计算应该没有问题吧,然后定时器回调函数做了如下处理Nconter 是一个全局变量,下面是延时函数
搞了好几天还是没搞明白是哪里出了问题导致接收到的数据总是不准确,我用示波器看了传入到芯片  IO  的数据的波形没有任何问题,所以烦请哪位大神看到了帮忙解惑一下是哪里出了问题,或者我该怎么测试去找出问题所在。


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
6条回答
猜不透亻尔心
2019-07-21 11:21
今天用这个延时函数进行发送尝试,之前一直在拿接收进行尝试(因为我们只需要接收东西),我通过操作IO口高低电平然后通过示波器观察波形发现,延时函数100us 电平宽度在250左右,将延时时间进行相应放大后就能正常发送某 Band 的数据了,我又考虑了下导致这样结果的原因,我的SYSCLK和APB1和APB2均是2M的频率,再考虑语句执行时间和延时时间混在一起就导致了这种情况。所以我得到的经验教训就是,在主频比较低而你又要求定时单位比较小的时候(我现在是us级的定时),建议使用示波器看下,可能会存在很大误差。除非迫不得已,否则少用IO口模拟串口,帖子就到这里吧,问题找到了。

一周热门 更多>