文章目录
前言
继续上个实验,学习stm32中断、DMA通信原理和编程方法。使用stm32tubemx和HAL库完成串口通信进阶实验。
一、stm32F103c8使用外部中断模式控制灯亮灭
STM32CubeMX新建项目
引脚配置
打开System Core->GPIO进行配置
引脚配置图
A4输出控制灯的亮灭,设置为GPIO_Output
A1持续输出高电平,设置同上
A7持续输出低电平,设置同上
C14开启做测试用,设置同上
B5模拟开关,设置为GPIO_EXTI5
配置EXIT
配置SYS
配置GPIO
Project Manager设置
project:
code Generator
点击GENERATE 创建项目
在keil中配置代码
打开项目找到HAL_GPIO_EXTI_Callback这个函数
该函数是给用户自己重写的,可以在这里根据不同的中断来执行不同的处理。在这里我们需要根据B5的不同中断来实现A4的亮灭。
该函数是给用户自己重写的,可以在这里根据不同的中断来执行不同的处理。在这里我们需要根据B5的不同中断来实现A4的亮灭。
函数代码:
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
if(GPIO_Pin == SWITCH_Pin){
//获取B5的电位
GPIO_PinState pinState = HAL_GPIO_ReadPin(SWITCH_GPIO_Port,SWITCH_Pin);
//低电位
if(pinState==GPIO_PIN_RESET)
HAL_GPIO_WritePin(LED_4_GPIO_Port,LED_4_Pin,GPIO_PIN_RESET);//把A4变为低电位
//高电位
else
HAL_GPIO_WritePin(LED_4_GPIO_Port,LED_4_Pin,GPIO_PIN_SET);//把A4变为高电位
}
}
这里出现错误,需要在该文件添加头文件#include “main.h”
编译生成hex文件
烧录
实验效果
因为抖动的原因,当B5什么也不接入的时候,LED灯一直在频繁闪,看起来是亮的,但是不是很亮。
当B5接入高电平后LED明显变亮。
当B5接低电平后LED直接熄灭。
二、串口通信中断实验
通过CubeMX配置项目
设置RCC
设置SYS
设置USART
设置NVIC
项目配置
生成.c/.h文件
点击GENERATE 创建项目
在keil中配置代码
在main函数前定义全局变量
char c;//指令 0:停止 1:开始
char message[]="hello Windows\n";//输出信息
char tips[]="CommandError\n";//提示1
char tips1[]="Start.....\n";//提示2
char tips2[]="Stop......\n";//提示3
int flag=0;//标志 0:停止发送 1.开始发送
在main函数中设置接收中断
HAL_UART_Receive_IT(UART_HandleTypeDef