#步骤如下
1.打开STM32cubemx,我的版本号是4.27.0,新建工程,选择芯片,例如STM32F103R8T6
2.左侧使能串口1,sys那里选择serial wire,否则导致后面无法下载程序,配置时钟,使能串口中断
3.在configuration页面配置DMA,如下所示
4.点击生成代码,在keil打开,在HAL_UART_IRQHandler(&huart1);前面添加 UsartReceive_IDLE(&huart1);此函数实现如下:
void UsartReceive_IDLE(UART_HandleTypeDef *huart)//IDLE接收数据
{
uint32_t temp;
if((__HAL_UART_GET_FLAG(huart,UART_FLAG_IDLE) != RESET))
{
__HAL_UART_CLEAR_IDLEFLAG(&huart1);
HAL_UART_DMAStop(&huart1);
temp = huart1.hdmarx->Instance->CNDTR;
UsartType.RX1_Size = RX_LEN - temp;
UsartType.RX_flag=1;
HAL_UART_Receive_DMA(&huart1,(uint8_t *)UsartType.RX1_pData,RX_LEN);
}
}
在主程序前面使能DMA接收,使能串口中断,main里面轮询flag就行,数据分析判断,清除flag
参考以下文章:
http://www.firebbs.cn/thread-24555-1-1.html
http://www.firebbs.cn/thread-23695-1-1.html
http://www.waveshare.net/study/article-644-1.html