参考教材
https://zhuanlan.zhihu.com/p/78704045
注意:这个教程里面DMA方式,少了设置中断这一步,要自己加上
cube的配置
DMA方式也需要中断,中断接收也需要中断
下面是DMA方式还需要设置的
相关代码
使用代码-中断接收普通发送
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
//将接收到的数据再发送
HAL_UART_Transmit(&huart1,recv_buff,20, 0xFFFF);//普通发送
}//中断接收函数 这里目前写的是普通的发送
HAL_UART_Receive_IT(&huart2, (uint8_t *)rx_buf,1);
len=sprintf(str,"adc2 = PA7:%4.2f, PC4:%4.2f, PB11:%4.2f, PB15:%4.2f, PA4:%4.2f\r\n",fval_adc2[0],fval_adc2[1],fval_adc2[2],fval_adc2[3],fval_adc2[4]);
HAL_UART_Transmit(&huart1,(unsigned char*)str,len, 0xffff);//普通发送
使用代码-DMA方式
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
//将接收到的数据再发送
HAL_UART_Transmit_DMA(&huart1,recv_buff,20);
//如果接收的数据大于20,DMA会把前20个发送出去,下一次接收到数据会把上一次接收超过20个的部分发送出去 而不是第二次接收的数据
}//DMA的方式发送 各有千秋
HAL_UART_Receive_DMA(&huart1, recv_buff, 20); //使能DMA接收
//使用DMA接收时,需要在主函数的主循环前加上这个
HAL_UART_Transmit_DMA(&huart1, (uint8_t*)str, len);//DMA的发送