OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 8999|回复: 13

HAL库的串口中断函数,敢不敢再庞大一点?

[复制链接]

12

主题

29

帖子

0

精华

初级会员

Rank: 2

积分
131
金钱
131
注册时间
2012-1-13
在线时间
29 小时
发表于 2017-9-21 22:29:00 | 显示全部楼层 |阅读模式
1金钱
每次中断,收到一个字节,记住是每次,执行一遍HAL_UART_IRQHandler(&huart1),
这个里面循环嵌套的 if 结构要把你遍历得怀疑人生。
要兼容性不要效率?我就想收数据而已,不是说中断函数要越短越快越好吗?

有没有大神知道运行一次这个HAL_UART_IRQHandler(&huart1),要花多久的时间?我115200的波特率有丢失数据啊

最佳答案

查看完整内容[请看2#楼]

不想用就操作寄存器吧
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
发表于 2017-9-21 22:29:01 | 显示全部楼层
不想用就操作寄存器吧
回复

使用道具 举报

357

主题

1478

帖子

12

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
8125
金钱
8125
注册时间
2015-10-15
在线时间
2929 小时
发表于 2017-9-21 22:38:46 | 显示全部楼层
是的。HAL库的串口处理比较复杂。。。而且局限性比较大。。。。
所以不建议调用HAL_UART_IRQHandler。
直接在中断服务函数里面写逻辑
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
发表于 2017-9-21 22:54:35 | 显示全部楼层
openedvadmin 发表于 2017-9-21 22:38
是的。HAL库的串口处理比较复杂。。。而且局限性比较大。。。。
所以不建议调用HAL_UART_IRQHandler。
直 ...

还是标准库用的爽,没辣么多坑,即使也很快可以排除,不用跳来跳去的
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复

使用道具 举报

12

主题

29

帖子

0

精华

初级会员

Rank: 2

积分
131
金钱
131
注册时间
2012-1-13
在线时间
29 小时
 楼主| 发表于 2017-9-21 23:33:26 | 显示全部楼层
openedvadmin 发表于 2017-9-21 22:38
是的。HAL库的串口处理比较复杂。。。而且局限性比较大。。。。
所以不建议调用HAL_UART_IRQHandler。
直 ...

直接写逻辑?到处是陷阱,防不胜坑啊。
用HAL_UART_Transmitt _DMA发送,结果这厮在发送完了之后竟然打开UART_IT_TC中断,通过这个TC中断调用“发送完成回调函数”,结束发送。
不用HAL_UART_IRQHandle,谁TM知道要去关掉这个IT_TC的位的?
我开始还以为是CubeMX的问题,浪费时间啊
回复

使用道具 举报

12

主题

29

帖子

0

精华

初级会员

Rank: 2

积分
131
金钱
131
注册时间
2012-1-13
在线时间
29 小时
 楼主| 发表于 2017-9-21 23:37:04 | 显示全部楼层
八度空间 发表于 2017-9-21 22:54
还是标准库用的爽,没辣么多坑,即使也很快可以排除,不用跳来跳去的

之前用标准库从来没有用过DMA,之前看了下没大明白,也没深究。
用了CubeMX后,发现DMA封装很到位,直接拿来用就可以,不用写一大堆代码。

所以也是有好处的。
回复

使用道具 举报

50

主题

1805

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
6662
金钱
6662
注册时间
2016-5-29
在线时间
910 小时
发表于 2017-9-22 08:38:53 | 显示全部楼层
直接DMA就好了.不用CPU来操心了.
回复

使用道具 举报

17

主题

231

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2085
金钱
2085
注册时间
2016-8-8
在线时间
362 小时
发表于 2017-9-22 09:02:38 | 显示全部楼层
看的浑浑噩噩的 调来调去的
黑夜给了我黑色的眼睛,我却用它来寻找白花花的银子,黄灿灿的金子,以及红彤彤的毛爷爷
回复

使用道具 举报

7

主题

185

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2729
金钱
2729
注册时间
2015-12-27
在线时间
469 小时
发表于 2017-9-22 09:03:20 | 显示全部楼层
直接自己改写吧。
回复

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
发表于 2017-9-22 11:44:10 | 显示全部楼层
newbuff 发表于 2017-9-21 23:33
直接写逻辑?到处是陷阱,防不胜坑啊。
用HAL_UART_Transmitt _DMA发送,结果这厮在发送完了之后竟然打 ...

我就看过官方的CPAL库之后,再看HAL库,直接不用了,要不使用标准库,要不直接操作寄存器,里边设置了好多坑啊
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复

使用道具 举报

12

主题

29

帖子

0

精华

初级会员

Rank: 2

积分
131
金钱
131
注册时间
2012-1-13
在线时间
29 小时
 楼主| 发表于 2017-9-22 14:59:40 | 显示全部楼层
八度空间 发表于 2017-9-22 11:44
我就看过官方的CPAL库之后,再看HAL库,直接不用了,要不使用标准库,要不直接操作寄存器,里边设置了好 ...

可是想用CubeMX啊,这个确实省事不少啊
回复

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
发表于 2017-9-22 15:14:50 | 显示全部楼层
newbuff 发表于 2017-9-22 14:59
可是想用CubeMX啊,这个确实省事不少啊

没用过,不评价

要不说说经验,整个教程文档出来
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复

使用道具 举报

357

主题

1478

帖子

12

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
8125
金钱
8125
注册时间
2015-10-15
在线时间
2929 小时
发表于 2017-9-23 20:49:50 | 显示全部楼层
HAL库的封装的串口过程是不太可能用在项目中的。。
我们串口实例就给了大家两种方式的代码
然后后面其他带串口的实例我们都基本不调用HAL_UART_IRQHandler函数。。。。。直接
自己去写中断服务函数
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

58

主题

359

帖子

0

精华

高级会员

Rank: 4

积分
987
金钱
987
注册时间
2014-9-29
在线时间
261 小时
发表于 2017-9-25 15:29:10 | 显示全部楼层
自己写法有问题,就不要怪别人库不好
几个if也耗不了多少时间
我就用原来的115200波特率  也没丢过数据
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-7-19 13:25

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表