完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
功能:stm32f4采用DMA方式进行不定长串口接收
平台:STM32CubeIDE(STM32CubeMX) 1、新建工程 示例中采用的是stm32f401re,先设置调试接口(默认是关闭的,不设置的话调试一次就不能调试了) 设置时钟,示例中采用的是无源12M晶振 设置串口1 DMA选项,默认就可以 中断设置,需要打开中断 新建设置完成了,另外加句,关于工程我个人喜欢这样设置 2、修改源码 采用接收空闲中断方式,原库文件没有这个中断的代码,我的方法是改源代码,进入这个文件夹 修改stm32f4xx_hal_uart.c文件,打开该文件 找到HAL_UART_IRQHandler函数,在下图位置处添加 /* UART in mode Idle -------------------------------------------------*/ if(((isrflags & USART_SR_IDLE) != RESET) && ((cr1its & USART_CR1_IDLEIE) != RESET)) { __HAL_UART_CLEAR_IDLEFLAG(huart); HAL_UART_IdleCpltCallback(huart); return; } 在这个文件如下图的位置添加 __weak void HAL_UART_IdleCpltCallback(UART_HandleTypeDef *huart) { UNUSED(huart); } 进入这个文件夹 修改stm32f4xx_hal_uart.h文件,打开该文件 在下图位置处添加 void HAL_UART_IdleCpltCallback(UART_HandleTypeDef *huart); 3、工程代码 回到工程文件,修改usart.c文件,添加 #include #define RXBUF_1_SIZE 255 uint8_t rx1_len=0; uint8_t recv1_end_flag=0; uint8_t rx1_buffer[RXBUF_1_SIZE]; 添加 void HAL_UART_IdleCpltCallback(UART_HandleTypeDef *huart) { HAL_UART_DMAStop(huart); if(huart->Instance == USART1) { rx1_len = RXBUF_1_SIZE - __HAL_DMA_GET_COUNTER(&hdma_usart1_rx); recv1_end_flag = 1; } } void UART_DMA_Init(void) { __HAL_UART_ENABLE_IT(&huart1, UART_IT_IDLE); HAL_UART_Receive_DMA(&huart1,rx1_buffer,sizeof(rx1_buffer)); } void UART_Info(void) { if(recv1_end_flag ==1) { HAL_UART_Transmit(&huart1,rx1_buffer, rx1_len,500);//接收数据打印出来 memset(rx1_buffer,0,sizeof(rx1_buffer)); rx1_len=0; recv1_end_flag=0; HAL_UART_Receive_DMA(&huart1,rx1_buffer,sizeof(rx1_buffer)); } } 在usart.h文件中,添加 void UART_DMA_Init(void); void UART_Info(void); main.c中添加 #include “usart.h” 添加 UART_Info(); 完成了。 通过串口调试工具,向开发板发送数据,开发板接收什么数据就向串口调试工具发送什么数据。 |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1683 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1582 浏览 1 评论
1013 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
703 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1627 浏览 2 评论
1892浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
675浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
538浏览 3评论
558浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
526浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-4 03:21 , Processed in 0.754089 second(s), Total 47, Slave 40 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号