stm32cube中的HAL库用UART时接收个数参数的提供

2019-07-14 14:48发布

研究了两天cube就发现一个问题,HAL库中UART的操作,有DMA和IT两种方式,发送数据时没有问题,接收数据时的函数
HAL_UART_Receive_DMA(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size)
和HAL_UART_Receive_IT(&UartHandle, (uint8_t *)aRxBuffer, RXBUFFERSIZE)中都必须提供接收个数这个参数,接收时谁能确定究竟是收多少个,这个参数没法提供,那这就没法用了,改他的HAL也不是好办法,这就决定了cube这个东西没法用了.
有碰到这个问题的吗,想用cube,但是诸如此类的问题解决不了就没法用啊
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
18条回答
60user170
1楼-- · 2019-07-15 22:48
其实4楼的办法是很好用的,我也在串口助手上实现了,但是回显不能在接收中断中用中断方式发送,直接用阻塞方式发送了也行的
nyvvhxcs
2楼-- · 2019-07-15 23:24
基本不用库,最多也是参考
7762642422d
3楼-- · 2019-07-16 05:12
ke3978 发表于 2019-1-4 07:14
一般不知道个数的都是接收到一个产生中断,然后在中断中放进你的缓存。在主程序中你想怎么整就怎么整。这就是道理。ST的库只是提供了一种方法。用不用用哪个怎么用还是咋自己说了算。

串口一般都有FIFO缓冲,打开这个缓冲,然后减少中断次数,一次可以接受8个或者16个字节,而不是1个字节,效率提升至少8倍或16倍。
接受完数据后再根据自己的实际情况进行数据分析处理。
7762642422d
4楼-- · 2019-07-16 06:47
xiuzhen122 发表于 2019-1-4 06:21
本帖最后由 魏科 于 2015-4-22 10:36 编辑

大家好,这是我在这个社区第一次发言,我开始也遇到这个问题,后来在百度和google都没有查到好的解决办法,我用的是串口中断,如果单纯按照大家说的去做代码会是这样的:

你这个是不错,为什么非得添加一个:
/*让串口信号量耗尽*/
          while(osOK != osSemaphoreWait(uc1sem_id,0));
直接设置这个信号量可用就行了。
sunguodong
5楼-- · 2019-07-16 07:22
 精彩回答 2  元偷偷看……
nvyweyrww1
6楼-- · 2019-07-16 11:07
的确如此

一周热门 更多>