用原点的开发板学习时发现没有关于DMA收数的例程,于是自己在网上找例程学习,使用的环境时CUBE IDE 1.80。过程记录如下:
1)配置:打开dma中断

2)手工添加代码:
__HAL_UART_ENABLE_IT(&huart1,UART_IT_IDLE);
HAL_UART_Receive_DMA(&huart1,aRxBuffer,13);
3)中断函数修改:
#if 1
ALIGN_32BYTES(__attribute__((section (".RAM_D2"))) uint8_t aRxBuffer[4]) = {0};
#else
__attribute__((section(".RAM_D2"))) uint8_t tt= 20;
__attribute__((section(".RAM_D2"))) uint8_t aRxBuffer[13] = "KEY_DOWN_K1\r\n";
#endif
void USART1_IRQHandler(void)
{
/* USER CODE BEGIN USART1_IRQn 0 */
uint8_t temp,rx_len,tmp_flag;
if(USART1 == huart1.Instance)
{

博主在使用CUBEIDE1.80进行STM32开发时遇到DMA串口接收问题,当设置接收数据量大于1时无法正常接收。通过查阅资料和分析,发现是HAL_UART_Receive_DMA函数参数设置及中断处理中的错误导致。解决方案涉及清除IDLE标志、关闭再重新启动DMA接收,并强调了初始化时避免设置接收缓冲区大小为1,以确保完整接收多个数据字节。
最低0.47元/天 解锁文章
1354

被折叠的 条评论
为什么被折叠?



