本帖最后由 自带腹肌的外套 于 2019-3-21 10:54 编辑 最近在做一个项目,因为需要用到多个串口,硬件串口就显得不够用了,所以 就打起了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 的数据的波形没有任何问题,所以烦请哪位大神看到了帮忙解惑一下是哪里出了问题,或者我该怎么测试去找出问题所在。 |
CUBEMXæ¶éé ç½®
STM32L151RDT6 SDIO读写SD卡 FIFO下溢错误,不知是什么原因
STM32L152 RTC唤醒STOP mode问题
STM32L152系列自带LCD驱动段码液晶屏,怎么驱动想要亮的段亮
STM32L151为何FLASH擦除后全是是0x00?
求助!!STM32L151中的RTC唤醒(wake up)中断问题
STM32L152普通I/O模拟SPI驱动W25Q16问题
STM32L152开发板原理图及说明文档
STM32L1系列,如何释放PA15为普通GPIO端口
STM32L151读取W25Q16的ID错误,请帮忙看看是什么原因
STM32L151 STOP模式唤醒程序跑哪儿了
首先帮忙骂一下方案设计者, IO模拟串口做应用,不顾产品稳定性坑害消费者。
其次 us级定时器 1us中断一次,系统时钟你设置的2M 你的MCU还有时间处理其他任务?
其三 你把时钟设置32M试试,定时器中断优先级要比串口高
其四 只要串口启动信号,停止信号你不检测了吗?一个bit至少采样5次,在判定实际的bit值,等等措施都要做好。
其五 串口IO平时就应该是高电平,这是标准,你把平时把IO拉低,别人平时可是拉高的
做方案的娃好惨
评分
查看全部评分
N年前用51做过, 是可行的, 但需要技巧。
评分
查看全部评分
评分
查看全部评分
今天用这个延时函数进行发送尝试,之前一直在拿接收进行尝试(因为我们只需要接收东西),我通过操作IO口高低电平然后通过示波器观察波形发现,延时函数100us 电平宽度在250左右,将延时时间进行相应放大后就能正常发送某 Band 的数据了,我又考虑了下导致这样结果的原因,我的SYSCLK和APB1和APB2均是2M的频率,再考虑语句执行时间和延时时间混在一起就导致了这种情况。所以我得到的经验教训就是,在主频比较低而你又要求定时单位比较小的时候(我现在是us级的定时),建议使用示波器看下,可能会存在很大误差。除非迫不得已,否则少用IO口模拟串口,帖子就到这里吧,问题找到了。
是呀,老板一句省成本,我们就要去搞
是的,可靠性有点。。。。想象是美好的,现实是残酷的
的确,经验比较少,没考虑到多任务,这次也是涨教训了