重庆交通大学信息科学与工程学院
《嵌入式系统基础A》课程
作业报告(第七周)
班 级: 物联网工程2002
姓名-学号 : 吴泽霖-632007060217
实验项目名称: 中断及串口通信进阶
实验项目性质: 设计性
实验所属课程: 《嵌入式系统基础》
实验室(中心): 南岸校区语音大楼
指 导 教 师 : 娄路
完成时间: 2022 年 10 月 22 日
一、实验内容和任务
中断及串口通信进阶
二、实验要求
1. 分组要求:每个学生独立完成,即1人1组。
2. 程序及报告文档要求:具有较好的可读性,如叙述准确、标注明确、截图清晰等。
3.项目代码上传github,同时把项目完整打包为zip文件,与实验报告(Markdown源码及PDF文件)、作业博客地址一起提交到学习通。
三. 实验过程介绍
一、用stm32F103核心板的GPIOA端一管脚接一个LED,GPIOB端口一引脚接一个开关(用杜邦线模拟代替)。采用中断模式编程,当开关接高电平时,LED亮灯;接低电平时,LED灭灯。
1、通过STMCube配置项目
配置RCC
配置SYS
选择 LED 灯引脚 PA5,设置引脚为输出模式 GPIO_Output;
选择作为外部中断的引脚 PB15,设置为与中断线 GPIO_EXTI15 连接。
将 GPIO_PA5 命名为 LD1
将 GPIO_PB15 命令为 B1_EXTI ,触发方式选择下降沿触发
配置中断优先级
2、生成keil文件
3、添加代码
将下列代码写在main.c的图片相应位置
/*
* @brief EXTI line detection callbacks.
* @param GPIO_Pin: Specifies the pins connected EXTI line,
* @retval None
*/
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
if( GPIO_Pin == B1_EXTI_Pin ) // 判断外部中断源
{
HAL_GPIO_TogglePin(LD1_GPIO_Port, LD1_Pin); // 翻转LD1状态
}
}
4、烧录运行
二、采用串口中断方式实现串口通信
1、CUBEMX配置
RCC配置
设置SYS
设置USART
设置NVIC
创建项目
2、代码编写
在main函数前定义全局变量
在main函数中设置接收中断
3、烧录运行
三、STM32采用串口DMA方式,用115200bps或更高速率向上位机连续发送数据
1、CUBEMX工程配置
RCC配置
设置串口
设置NVIC
DMA设置
时钟源设置
项目文件设置
2、编写代码
烧录运行
四、总结
更加清楚明确的了解到串口通信中断的过程,也了解了DMA通信的中断原理,库函数分析对应寄存器,以及对应函数。
五、参考
https://blog.youkuaiyun.com/as480133937/article/details/105013368
https://blog.youkuaiyun.com/qq_47281915/article/details/121053903
https://blog.youkuaiyun.com/m0_58892312/article/details/121004248