STM32的串口中断最大处理时间

[复制链接]
2699|9
 楼主| inurl 发表于 2013-1-19 09:38 | 显示全部楼层 |阅读模式
stm32 波特率设成 115200*4 ,那么它传输一位时间是 1/115200/4  = 2.17us左右

收全一个字节要 (8+1+1)*2.17 = 20us

现在实测串口中断处理函数处理时间要 9us (包括等待一个字节接收完毕时间),这个时间够吗 ?

stm32串口没有FIFO ,真是让人啄级啊。

STM32是收到了一个起始位就产生了硬件中断吗? 然后再在中断处理函数里面等待硬件接收完毕一个字节?

uet_cache 发表于 2013-1-19 09:50 | 显示全部楼层
肯定接收完毕后才置位。
你的波特率这么高,可以连续收完,再退出中断,进行处理。
airwill 发表于 2013-1-19 10:09 | 显示全部楼层
本帖最后由 airwill 于 2013-1-19 10:10 编辑

通常是没有问题的. 由于 NVIC 是有优先级的. 还得看其他高优先级中断的时间.
另外, 由于 USART 是带缓冲的, 中断时间最长(偶尔达) 40uS 也没有问题.
如果这个时间也不能保证, 那你考虑 DMA 吧
ljxh401 发表于 2013-1-19 10:45 | 显示全部楼层
DMA 可以代替 fifo 啊 随便你怎么设置
 楼主| inurl 发表于 2013-2-18 18:49 | 显示全部楼层
airwill 发表于 2013-1-19 10:09
通常是没有问题的. 由于 NVIC 是有优先级的. 还得看其他高优先级中断的时间.
另外, 由于 USART 是带缓冲的, ...

DMA有个问题, 他要设置一个固定的DMA接收长度才进中断,但是串口数据无法固定长度
 楼主| inurl 发表于 2013-2-18 18:50 | 显示全部楼层
ljxh401 发表于 2013-1-19 10:45
DMA 可以代替 fifo 啊 随便你怎么设置

DMA有个问题, 他要设置一个固定的DMA接收长度才进中断,但是串口数据无法固定长度
LDTEST 发表于 2013-2-18 19:06 | 显示全部楼层
对发送的消息做处理 带有长度,然后根据长度用DMA接收
 楼主| inurl 发表于 2013-2-21 13:41 | 显示全部楼层
LDTEST 发表于 2013-2-18 19:06
对发送的消息做处理 带有长度,然后根据长度用DMA接收

有点麻烦, 在用UART IDLE中断+DMA 做
LDTEST 发表于 2013-2-21 13:51 | 显示全部楼层
inurl 发表于 2013-2-21 13:41
有点麻烦, 在用UART IDLE中断+DMA 做

...好方法!
 楼主| inurl 发表于 2013-2-21 19:23 | 显示全部楼层
LDTEST 发表于 2013-2-21 13:51
...好方法!

您需要登录后才可以回帖 登录 | 注册

本版积分规则

37

主题

293

帖子

1

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