STM32F USART电平反向

[复制链接]
4349|16
 楼主| tionsa 发表于 2010-7-26 09:50 | 显示全部楼层 |阅读模式
请教下各位DX, 我想把发送USART的时候,开始位为低电平,停止位为高电平修改为开始位为高电平,停止位为低电平.该如何操作.我这么做的目的是为了跟我这边的时序配合.
另此方法得从软件看如何修改设置,硬件已经确定了的.谢谢。
香水城 发表于 2010-7-26 09:57 | 显示全部楼层
怎么可能有这样的电平反向?这样改完之后就不是UART了。
 楼主| tionsa 发表于 2010-7-26 10:02 | 显示全部楼层
谢谢回复.
情况是这样的。
数据0时间共1.28us, H电平占360ns,L电平占920ns.
数据1时间共1.28us, H电平占960ns,L电平占320ns.
由于这个时间比较特别,用SPI无法做到,所以我就想到用UART设置波特率后满足这个时序要求.根据我这个情况,楼上的有什么建议? (在线等).
香水城 发表于 2010-7-26 10:41 | 显示全部楼层
我暂时没有什么好建议,但是你不妨谈谈如果能够实现USART电平反向,你打算怎么实现?
 楼主| tionsa 发表于 2010-7-26 10:44 | 显示全部楼层
我按照一为128ns来发送,然后高和低分别是3和7,算进停止位.这样先发H,在L. 数据格式的话
就是1个开始位+8个数据+1停止位.
这样数据0 就是 1个开始位. 0xC0,和1个停止位.这样发送的。
香水城 发表于 2010-7-26 10:53 | 显示全部楼层
如果是这样的话,为什么不能用SPI实现?

如果不能用SPI模块实现,也不能用USART模块的同步方式实现吗?
 楼主| tionsa 发表于 2010-7-26 10:58 | 显示全部楼层
SPI那个分频系数不是只有固定的几个选项吗? 可以任意指定?
香水城 发表于 2010-7-26 11:00 | 显示全部楼层
那么你就用USART模块的同步方式实现,USART可以比较精细地设置波特率。
 楼主| tionsa 发表于 2010-7-26 11:04 | 显示全部楼层
但是你那个时序要求是先发高电平,在发低电平,这样的话,如果软件设置不了的话,我得外部加一个反相器才行
香水城 发表于 2010-7-26 11:17 | 显示全部楼层
先发高电平,在发低电平,正好发送完一个字节后是低电平呀。

你先试试USART模块的同步方式,如果不行只能再一个反相器了。

另一个实现办法是使用定时器+DMA实现,把相应的时序计算好放在内存中,再使用DMA逐个送到定时器的寄存器中,通过改变PWM输出的占空比实现。
 楼主| tionsa 发表于 2010-7-26 11:22 | 显示全部楼层
那定时器的中断就需要多少时间呢.  这个STM32F的定时器产生不了这个中断.我上次只能到4us
香水城 发表于 2010-7-26 12:32 | 显示全部楼层
那定时器的中断就需要多少时间呢.  这个STM32F的定时器产生不了这个中断.我上次只能到4us
tionsa 发表于 2010-7-26 11:22


用中断当然会有问题,所以我才建议你用DMA。
McuPlayer 发表于 2010-7-26 14:12 | 显示全部楼层
用上DMA可以纳秒级别了,别老想着中断服务程序
 楼主| tionsa 发表于 2010-7-27 09:11 | 显示全部楼层
楼上的能给仔细说说,或者给个例程我看看吗
yzzly 发表于 2010-7-27 10:15 | 显示全部楼层
接口都是标准的,怎么搞的这么复杂?
香水城 发表于 2010-7-27 10:33 | 显示全部楼层
STM32固件库中有使用DMA操作USART发送与接收的例子。
 楼主| tionsa 发表于 2010-7-27 17:51 | 显示全部楼层
好的,谢谢
您需要登录后才可以回帖 登录 | 注册

本版积分规则

18

主题

45

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部