[求助] stm32用GPIO模拟普通异步串口接收数据

CHChao   2017-12-12 10:42 楼主
最近在用stm32f103做一些简单应用,芯片本身自带串口只有2个,我需要4个,才能达到要求,就想用普通GPIO口模拟串口收发。
数据发送比较容易,但接收一直有问题,之中无法通过串口工具像stm32正常发送数据。在网上找到的多数例子方法——计数器、中断等,都不太适合。我用的是HAL库,管脚数据用用逻辑分析仪抓出的波形(发送的是接收到的数据:异常)如图:
求大神指点。

回复评论 (6)

IO模拟串口的接收最好辅助以外中断,纯粹的查询法需要系统资源够用且编程合理。
上传了一些书籍资料,也许有你想要的:https://download.eeworld.com.cn/user/chunyang
点赞  2017-12-12 15:36
两个接收都在里判断,如果两个串口收到数据的时间不能保证一定间隔。就容易出问题。根据波特率,设置某个频率的中断。把波形拼出来。
点赞  2017-12-13 09:49
引用: chunyang 发表于 2017-12-12 15:36
IO模拟串口的接收最好辅助以外中断,纯粹的查询法需要系统资源够用且编程合理。

本来是想用定时器溢出中断来实现接收的,但是由于HAL库刚开始使用,中断封装位置不明,同stm32外设库有明显区别,不清楚怎么编辑中断服务函数
点赞  2017-12-13 10:08
引用: CHChao 发表于 2017-12-13 10:08
本来是想用定时器溢出中断来实现接收的,但是由于HAL库刚开始使用,中断封装位置不明,同stm32外设库有明 ...

你的想法是定时查询,这个需要合理调度系统资源的,对编程效率的要求也较高。模拟串口部分最好使用汇编编程,这样可以实现最高的编程效率。当然,这对编程能力的要求也较高。
上传了一些书籍资料,也许有你想要的:https://download.eeworld.com.cn/user/chunyang
点赞  2017-12-13 11:05
不知道通信的两边是不是都是你写?
如果是那就简单了,直接来个IO 模拟I2C。
非要用串口,可以考虑电子开关,那样简单很多,成本也还好。
MCU单片机QQ37806425 一级代理,免费开发。
点赞  2017-12-13 15:22
计数器、中断等,那你就直接用寄存器的例程就好了啊。很多寄存器例程的
点赞  2017-12-13 17:03
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复