芯片选择:
打开cube软件,选择从芯片来创建工程,一般开发都是使用这个来开发,有的时候也可能使用另外两个,但不多,第二个基于ST提供的开发板创建工程,针对性高,第三个则选择ST提供的例程来创建工程。
开启串口
参考之前文章生成初始化代码部分进行配置:https://blog.csdn.net/weixin_56393108/article/details/121124395?utm_source=app&app_version=4.17.2&code=app_1562916241&uLinkId=usr1mkqgl919blen
开启DMA
在配置普通串口的基础上增加以下步骤,点击串口配置里面的DMA设置
点击进入Project Manager 配置生成工程的名字,存储路径**(不要有中文)**以及编译器,
/* USER CODE BEGIN 1 */
/* USER CODE END 1 */
普通串口:
超时机制发送接收,即传入参数有一个时间限制,超过之后或者完成之后,发送、接收就停止;
HAL_UART_Transmit(); //串口发送数据
HAL_UART_Receive(); //串口接收数据
中断机制发送接收,通过中断来接收或者发送数据,发送完就停止;
HAL_UART_Transmit_IT();//串口中断模式发送
HAL_UART_Receive_IT();//串口中断模式接收
DMA串口:
DMA中断机制发送接收,通过中断来接收或者发送数据,发送完就停止;
HAL_UART_Transmit_DMA();//串口DMA模式发送
HAL_UART_Transmit_DMA();//串口DMA模式接收
打开MDK,在主函数中用户代码段编写如下代码:
头部定义字符串数组
/* USER CODE BEGIN Includes */
unsigned char buf[20];
/* USER CODE END Includes */
主函数插入以下代码:
/* USER CODE BEGIN 2 */
//发送数据
HAL_UART_Transmit_DMA(&huart1,'Uart System Init\r\n',sizeof('Uart System Init\r\n'));
//启动接收固定长度的数据
//只有在达到接收长度之后,才会调用回调函数
HAL_UART_Receive_DMA(&huart1,buf,sizeof('jeck666\r\n'));
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
HAL_Delay(1000);
}
/* USER CODE END 3 */
设置串口1回调函数(DMA回调函数的触发条件为接收到设置长度的字符串后,才调用回调函数)
/* USER CODE BEGIN 4 */
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
if(huart == &huart1)
{
//将接收到的数据再发送
HAL_UART_Transmit_DMA(&huart1,buf,13);
}
}
/* USER CODE END 4 */
使用MDK自带的下载环境下载程序,我们给单片机连接ST-Link后配置下载,点击魔术棒,选择debug
联系客服