完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
1.修改CubeMX生成的串口初始化函数
void MX_USART1_UART_Init(void) { huart1.Instance = USART1; huart1.Init.BaudRate = 19200; huart1.Init.WordLength = UART_WORDLENGTH_8B; huart1.Init.StopBits = UART_STOPBITS_1; huart1.Init.Parity = UART_PARITY_NONE; huart1.Init.Mode = UART_MODE_TX_RX; huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE; huart1.Init.OverSampling = UART_OVERSAMPLING_16; if (HAL_UART_Init(&huart1) != HAL_OK) { _Error_Handler(FILE, LINE); } __HAL_UART_ENABLE_IT(&huart1, UART_IT_IDLE); //使能空闲中断 HAL_UART_Receive_DMA(&huart1, RxDMABuf_1, RXBUF_1_SIZE); //启动DMA接收 } 该函数在usart.c文件下。要更改的就是增加最后两行,其中RxDMABuf_1 是数据接收缓存,RXBUF_1_SIZE 是DMA一帧接收的最大字节数。 2.修改CubeMX生成的串口中断函数 void USART1_IRQHandler(void) { HAL_UART_IRQHandler(&huart1); UART_IDLE_Deal(&huart1); //自定义空闲中断处理函数 } 该函数在stm32xxx_it.c文件下。增加UART_IDLE_Callback自定义空闲中断处理函数 3.定义UART_IDLE_Deal空闲中断处理函数 void UART_IDLE_Deal(UART_HandleTypeDef *huart) { unsigned int temp; if( __HAL_UART_GET_FLAG(huart, UART_FLAG_IDLE) != RESET) //判断是否空闲中断 { __HAL_UART_CLEAR_IDLEFLAG(huart); temp = huart->Instance->SR; temp = huart->Instance->DR; HAL_UART_DMAStop(huart); if(huart->Instance == USART1) { //计算DMA接收的长度,也就是接收完一帧的长度 DMA_Usart1_RxSize = RXBUF_1_SIZE - __HAL_DMA_GET_COUNTER(&hdma_usart1_rx); if(DMA_Usart1_RxSize > 0 ) { memcpy(RxBuf_1, RxDMABuf_1, DMA_Usart1_RxSize); RxBufSize_1 = DMA_Usart1_RxSize; memset(RxDMABuf_1, 0, sizeof(RxDMABuf_1)); } HAL_UART_Receive_DMA(&huart1, RxDMABuf_1, RXBUF_1_SIZE); //启动下一次接收 } } } 这个函数我定义在了usart.c文件下。功能主要就是接收完一帧数据后将数据拷贝出来,以免下次接收后被覆盖。 4.定义串口接收函数 unsigned char Uart_GetData(UART_HandleTypeDef *huart, unsigned char *buf) { unsigned char Size = 0; if(huart->Instance == USART1) { if(RxBufSize_1 > 0) { Size = RxBufSize_1; RxBuf_1[RxBufSize_1] = 0; memcpy(buf, RxBuf_1, RxBufSize_1); RxBufSize_1 = 0; } } return Size; } 该函数供主程序调用。 |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1750 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1608 浏览 1 评论
1049 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
721 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1665 浏览 2 评论
1924浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
709浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
559浏览 3评论
583浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
544浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-18 10:10 , Processed in 0.729992 second(s), Total 76, Slave 59 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号