STM32中断与DMA通信编程

本文详细介绍了如何使用STM32F103单片机进行中断模式控制LED灯、串口中断通信以及串口DMA方式发送数据。通过STM32CubeMX配置GPIO、中断和DMA,然后在Keil中编写代码并烧录,实现了从基础到高级的STM32通信功能。
摘要由CSDN通过智能技术生成

一、采用中断模式控制LED灯

(一)题目要求

用stm32F103核心板的GPIOA端一管脚接一个LED,GPIOB端口一引脚接一个开关(用杜邦线模拟代替)。采用中断模式编程,当开关接高电平时,LED亮灯;接低电平时,LED灭灯。

(二)创建工程

1、STM32CubeMX

(1)配置管脚
我选择PA5接LED,PB9作为外部中断触发
PA5选择Output,PB9选择中断触发EXTI_9
在这里插入图片描述
在这里插入图片描述
(2)配置GPIO
PA5默认设置即为高电平点亮,不用更改
在这里插入图片描述
(3)开启中断
选择NVIC,勾选Enabled
在这里插入图片描述
(4)设置时钟树
先配置时钟,选择晶振
在这里插入图片描述
配置时钟树
在这里插入图片描述
(5)工程相关设置
在这里插入图片描述
在这里插入图片描述

2、Keil

打开工程
在这里插入图片描述
查看一下gpio.c文件,__weak为虚函数,需要我们自己编写
在这里插入图片描述
在main.c里加入代码:

void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
   
	if( GPIO_Pin == interrupt_Pin)//判断外部中断源
	{
   
		HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_5);//翻转PA5状态
	}
}

在这里插入图片描述
编译,生成.hex文件
在这里插入图片描述

(三)烧录

在这里插入图片描述

(四)运行结果

3.3V时亮,接地时灭
在这里插入图片描述

二、采用串口中断方式进行串口通信

(一)代码编写

这里用的是学长已经写好的代码,注释很详细,可以慢慢学习
链接:https://pan.baidu.com/s/1T3pxkaoRwqnduxtEOk0pXA
提取码:9teg

bsp_usart.c:

#include "bsp_usart.h"

// 串口中断服务函数
void DEBUG_USART_IRQHandler(void)
{
   
  uint8_t ucTemp;
	//串口一接收中断
	if(USART_GetITStatus(DEBUG_USARTx,USART_IT_RXNE)!=RESET)
	{
   
		//获取接收到的数据
		ucTemp = USART_ReceiveData(DEBUG_USARTx);
		//如果接收标志为 0 ,则执行下面的部分
		if((USART_RX_FLAG & 0x8000) == 0)
		{
   
			//接收到了0x0d
			if(USART_RX_FLAG & 0x4000)
			{
   
				//接收错误,重新开始
				if(ucTemp != 0x0a)
					USART_RX_FLAG=0;
				//接收完成
				else
					USART_RX_FLAG |= 0x8000;
			}
			//还未接收到0x0d
			else
			{
   
				//接收到回车
				if(ucTemp == 0x0d)
				{
   
					USART_RX_FLAG |= 0x4000
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值