STM32F407 IO模拟串口

 

背景


公司一款主板基于STM32F407ZET6,片内6路串口,竟然不够用(😄😄),那就模拟呗,此次模拟1路串口,本次DEMO使用正点原子探索者开发板,系统时钟频率是168MHz

DEMO功能


1.数据发送

2.数据接收

3.串口打印

4.可配置波特率

实现思路


原理:IO口模拟串口,一切按照串口协议进行操作

简易串口通信协议:起始位*1 + 数据位*8 + 停止位, 时序图如下

1.发送

根据协议,计算好不同波特率对应的延时时间进行数据发送即可

例如,

当波特率是115200时,发送1bit数据需要 1/115200 = 8.68us;

所以,根据协议每一位数据传输延时8.68us即可,我直接使用原子的us延时函数,延时8us,可行

2.接收

通过外部中断检测接收管脚的下降沿,检测到起始信号后开启定时器,定时器按照波特率设定好时间,每隔一段时间进入定时器中断接收数据,完成一个字节后关闭定时器,然后在主函数中清BUFF和接收长度计数即可。

此时定时器操作需要注意,定时器配置抢占优先级和响应优先级均为0(最高),计算定时器配置

定时1/(波特率*3倍)us,如果波特率是115200,则定时时间为2.89us,

系统时钟频率168MHz,分频系数是2,定时器时钟频率为 = 84MHz,接收周期是1/84us,所以重装载计数值为

2.89/(1/84) = 243,以此公式计算则可以得出常用波特率下的重装载计数值。

详细可以下载程序测试使用

操作过程


1.准备正点原子探索者开发板一块

2.TTL转USB串口调试线一个

3.拔掉战舰USART1跳线帽

4.将串口线插在跳线帽所在PA9,PA10(PA9本来是串口1的接收,我们用作发送,  PA10本来是串口1的发送,我们用作接收,具体实现在代码中体现)

5.烧写按照程序设计思路所编写代码,然后通过串口工具发送数据给开发板,此时串口助手收到所发内容

测试记录(下边是猫猫串口助手,很好用,强力推荐):

经测试,程序可以配置各种波特率使用,如有问题望指正:QQ 473150204

 

源码(MDK)


代码地址:https://download.csdn.net/download/sky_Buddha/12187894

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值