目录
一 实验要求
学习stm32中断、DMA通信原理和编程方法。使用stm32tubemx和HAL库分别完成以下编程练习:
1. 用stm32F103核心板的GPIOA端一管脚接一个LED,GPIOB端口一引脚接一个开关(用杜邦线模拟代替)。采用中断模式编程,当开关接高电平时,LED亮灯;接低电平时,LED灭灯。
2. 采用串口中断方式重做上周的串口通信作业,分别实现:1)当stm32接收到字符“s”时,停止持续发送“hello windows!”; 当接收到字符“t”时,持续发送“hello windows!”(提示:采用一个全局标量做信号灯);2)当stm32接收到字符“stop stm32!”时,停止持续发送“hello windows!”; 当接收到字符“go stm32!”时,持续发送“hello windows!”(提示:要将接收到的连续字符保存到一个字符数组里,进行判别匹配。写一个接收字符串的函数。参考:STM32的USART窗口通讯程序——串口通讯_HarrietLH的博客-CSDN博客,此学长用的是中断方式,标准库,但是总体思路一样)。
3. STM32采用串口DMA方式,用115200bps或更高速率向上位机连续发送数据。
二、中断模式控制LED灯
1.建立工程
首先选择STM32F103C8芯片
点击System Core,进入里面的SYS,在debug那里选择Serial Wire
进入上面的RCC,将HSE那里设置为Crystal/Ceramic Resonator
来到Clock Configuration选项
将PB6管脚的引脚模式设置为输出模式:GPIO_Output。
将PA2管脚的引脚模式设置为外部中断:GPIO_EXTI2。
选择对应的外部中断线,点击Enabled。
其次,设置中断的优先级,再设置时钟即可。
然后选择Project Manager,选择MDK/ARM,再创建工程名
在Code Generator中勾选如图选项
2.代码
三、串口中断
1.工程的创建
前面步骤与之前相同,只需要增添以下步骤
找到USART1,在Mode中选择Asynchronous
进入NVIC Settings界面,勾选Enabled,使能中断。
最后取好文件名,选择MDK-ARM即可生成工程文件。
找到main.c文件
勾选生成hex文件
2.进行烧录
3.运行结果
四、STM32采用串口DMA方式发送数据
1.新建工程
与之前步骤相同,先找到STM32F103C8芯片,设置与上实验相同
此外进行以下操作,可以看到以下参数:波特率为115200 Bits/s;传输数据长度为8 Bit;无奇偶检验;停止位为1
勾选该选项,使其能中断
在同一界面下点击DMA setting->Add添加通道
然后来到Clock Configuration界面
最后,再取号文件名生成工程文件
2.烧录
3.实验结果
五 实验总结
总结:通过此次学习我学会了如何使用串口DMA方式向上位机连续发送数据,如何使用串口中断,更加强化了我的动手能力和学习新知识能力,学习就是反复从错误中纠正自己。