实验要求:
学习stm32中断、DMA通信原理和编程方法。使用stm32tubemx和HAL库分别完成以下编程练习:
1. 用stm32F103核心板的GPIOA端一管脚接一个LED,GPIOB端口一引脚接一个开关(用杜邦线模拟代替)。采用中断模式编程,当开关接高电平时,LED亮灯;接低电平时,LED灭灯。
2. 采用串口中断方式重做上周的串口通信作业。
3. STM32采用串口DMA方式,用115200bps或更高速率向上位机连续发送数据。
所需工具:
所用工具:
1、芯片: STM32F103C8T6
2、STM32CubeMx软件
3、串口调试软件
4、STM32F1xx/STM32F4xxHAL库
具体实验步骤如下:
建立工程:
设置RCC:设置高速外部时钟HSE 选择外部时钟源
1点击USATR1
2设置MODE为异步通信(Asynchronous)
3基础参数:波特率为115200 Bits/s。传输数据长度为8 Bit。奇偶检验无,停止位1 接收和发送都使能
4GPIO引脚自动设置 USART1_RX/USART_TX
5 NVIC Settings 一栏使能接收中断
进行DMA设置
时钟设置:
工程文件相关设置:
打开工程:
添加代码:
如下:
/* USER CODE BEGIN Init */
uint8_t Senbuff[] = "\r\n**** Serial Output Message by DMA ***\r\n UART DMA Test \r\n hello world!";
/* USER CODE END Init */
while (1)
{
/* USER CODE END WHILE */
HAL_UART_Transmit_DMA(&huart1, (uint8_t *)Senbuff, sizeof(Senbuff));
HAL_Delay(1000);
/* USER CODE BEGIN 3 */
}
/* USER CODE END 3 */
}
没有错误之后,烧录,然后打开串口调试助手:
结果如下
参考博客:
【STM32】HAL库 STM32CubeMX教程十一---DMA (串口DMA发送接收)