中级会员
 
- 积分
- 232
- 金钱
- 232
- 注册时间
- 2016-8-31
- 在线时间
- 252 小时
|
最近玩串口舵机,尝试了一下串口的单线半双工模式,走了很多弯路,最后发现很简单,记录下来供大家参考
先看手册:
1、USART_CR2寄存器的LINEN和CLKEN位 置0
2、USART_CR3寄存器的SCEN和IREN位 置0
其实上面两个寄存器复位值本来就是0,其实不用管,别不小心置1就行
3、USART_CR3中的HDSEL位(”HALF DUPLEX SEL”) 置1
这个需要设置。对应库函数为USART_HalfDuplexCmd(USART1, ENABLE);
配置就这么一点东西。重要的有两个注意事项
一、手册上这一章节(图上有)有这么一句话:● 当没有数据传输时,TX总是被释放。因此,它在空闲状态的或接收状态时表现为一个标准I/O口。这就意味该I/O在不被USART驱动时,必须配置成悬空输入(或开漏的输出高)。
这句话可能是写错了,也可能是描述的芯片自动完成的操作,总之TX不能设置悬空输入,要用复用推挽输出或者复用开漏输出!!
二、TX要加上拉电阻!!!拉到3.3V。(可能拉到5V也可以,毕竟有的TX是FT的。但是我PA9拉到5V之后烧了,不知道是线接错了还是怎么的。。。)
为什么我没上拉的时候也能跟电脑通信?因为跟电脑通信是直接接的USB转串口的RX,电平是稳定的,而舵机的单线就不行了
其实上面说的网上大神们的教程都提到了,可惜我眼瞎
最后一点要注意的,波特率高的时候,接收中断函数一定不要太复杂,时间有限
|
|