完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
前言
不必害怕未知,无需恐惧犯错,做一个Creator! 本文主要介绍STM32_HAL库开发中串口_FIFO的使用。 一、开发步骤 1. Cubemx配置
2. 中断函数编写 生成KEIL文件后,编写中断响应函数。 void USART2_IRQHandler(void){ /* USER CODE BEGIN USART2_IRQn 0 */ /* USER CODE END USART2_IRQn 0 */ HAL_UART_IRQHandler(&huart2); /* USER CODE BEGIN USART2_IRQn 1 */ InterRxBufferWrite(); /* USER CODE END USART2_IRQn 1 */}3. 功能函数编写 此处使用环形FIFO缓存区对串口数据进行处理,因此编写环形FIFO缓冲区的功能函数 uint8_t InterRxBufferWrite(void) //串口接收缓冲区写函数{ if (InterFifo.RxBufferWptr == (InterFifo.RxBufferRptr - 1)) //串口缓冲区满了 { return 0; } HAL_UART_Receive_IT(&huart2, &InterFifo.RxBuffer[InterFifo.RxBufferWptr++], 1); InterFifo.RxBufferWptr %= INTER_BUFFER_NUM;//写入一个字节数据到缓冲区中 return 1;}uint8_t InterRxBufferRead(uint8_t* data) //串口接收缓冲区读函数{ if (InterFifo.RxBufferRptr == InterFifo.RxBufferWptr) //串口缓冲区为空 { return 0; } *data = InterFifo.RxBuffer[InterFifo.RxBufferRptr++]; //从缓冲区读取一个字节数据并返回 InterFifo.RxBufferRptr %= INTER_BUFFER_NUM; return 1;}uint8_t InterTxBufferWrite(uint8_t data) //串口发送缓冲区写函数{ if(InterFifo.TxBufferWptr == (InterFifo.TxBufferRptr - 1)) //串口缓冲区满了 { return 0; } InterFifo.TxBuffer[InterFifo.TxBufferWptr++] = data; InterFifo.TxBufferWptr %= INTER_BUFFER_NUM; //写入一个字节数据到缓冲区中 return 1;}uint8_t InterTxBufferRead(uint8_t* data) //串口发送缓冲区读函数{ if(InterFifo.TxBufferRptr == InterFifo.TxBufferWptr) //串口缓冲区为空 { return 0; } *data = InterFifo.TxBuffer[InterFifo.TxBufferRptr++]; //从缓冲区读取一个字节数据并返回 InterFifo.TxBufferRptr %= INTER_BUFFER_NUM; return 1;}二、主要接口函数 1. 串口中断函数 void USART2_IRQHandler(void): 如果设置为接收中断,则没收到一个字节出发一次中断。 注意添加使用串口接收中断配置函数:__HAL_UART_ENABLE_IT(&huart2, UART_IT_RXNE); 2. HAL库串口发送函数 HAL_UART_Transmit(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout) 参数:串口名、串口数据地址、串口数据长度、超时时间 将指定地址和长度和数据通过串口进行发送 3.HAL库串口接收函数 HAL_UART_Receive_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size) HAL库串口接收函数 参数:串口名、串口数据地址、串口数据长度 接收指定长度的数据到指定数据地址。 总结 本项目中串口的使用主要可以归纳为: 1.串口环形FIFO缓冲区功能函数编写 2.串口FIFO使用至串口中断内 3.根据串口中断使用灵活使用串口 提示:若有错误不足,欢迎批评指正。该系列文章仅供参考,欢迎互相学习交流。 感谢你的阅读,期待你的关注收藏点赞! |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1364 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1359 浏览 1 评论
780 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
562 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1394 浏览 2 评论
1758浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
484浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
420浏览 3评论
414浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
389浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-9-29 05:48 , Processed in 0.740702 second(s), Total 48, Slave 42 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号