中断及串口通信

一, stm32外部中断模式控制灯亮灭

1,新建项目
在这里插入图片描述
2,配置RCC
在这里插入图片描述
3,配置SYS
在这里插入图片描述
4,配置GPIO
在这里插入图片描述
5,设置引脚
在这里插入图片描述

6,NVIC设置触发方式选择下降沿触发
在这里插入图片描述
7,使能引脚对应的外部中断线 EXTI line[15:10]
在这里插入图片描述
8,配置中断优先级
在这里插入图片描述
8,创建项目
在这里插入图片描述
8,打开工程编写代码
外部中断处理函数

/*
* @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状态
		}
}

在这里插入图片描述
9,烧录
引脚
A5–LED灯
B15—开关

第五周


第五周2

10,结果
  采用中断模式编程,当开关接入高电平后LED变亮。当开关接低电平后LED熄灭。

二,串口中断方式进行串口通信

1,CubeMX配置项目
在这里插入图片描述
2,选择芯片
在这里插入图片描述

3,设置RCC
在这里插入图片描述
4,设置SYS
在这里插入图片描述
5,设置USART1
在这里插入图片描述
7,创建项目,打开keil在这里插入图片描述
8,在keil配置代码
在main函数前定义全局变量

char c;//指令 0:停止  1:开始
char message[]="hello Windows\n";//输出信息
char tips[]="CommandError\n";//提示1
char tips1[]="S\n";//提示2
char tips2[]="T\n";//提示3
int flag=0;//标志 0:停止发送 1.开始发送

在这里插入图片描述
9,main主函数中接收中断的设置

 HAL_UART_Receive_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size)
 对()中代码的解释
 UART_HandleTypeDef *huart      UATR的别名    
 huart1  *pData      			接收到的数据存放地址
 Size                      		接收的字节数

 1. 串口中断接收,以中断方式接收指定长度数据。
 2. 大致过程是,设置数据存放位置,接收数据长度,然后使能串口接收中断。
 3. 接收到数据时,会触发串口中断。
 4. 再然后,串口中断函数处理,直到接收到指定长度数据
 5. 而后关闭中断,进入中断接收回调函数,不再触发接收中断。(只触发一次中断)

在这里插入图片描述
10,main函数中的while循环里面添加传输代码

if(flag==1){
			//发送信息
			HAL_UART_Transmit(&huart1, (uint8_t *)&message, strlen(message),0xFFFF); 
			
			//延时
			HAL_Delay(1000);
		}

在这里插入图片描述
11,在main函数下面添加中断处理函数

void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
	
	//当输入的指令为0时,发送提示并改变flag
	if(c=='0'){
		flag=0;
		HAL_UART_Transmit(&huart1, (uint8_t *)&tips2, strlen(tips2),0xFFFF); 
	}
	
	//当输入的指令为1时,发送提示并改变flag
	else if(c=='1'){
		flag=1;
		HAL_UART_Transmit(&huart1, (uint8_t *)&tips1, strlen(tips1),0xFFFF); 
	}
	
	//当输入不存在指令时,发送提示并改变flag
	else {
		flag=0;
		HAL_UART_Transmit(&huart1, (uint8_t *)&tips, strlen(tips),0xFFFF); 
	}

	//重新设置中断
		HAL_UART_Receive_IT(&huart1, (uint8_t *)&c, 1);  
}

12,编译
在这里插入图片描述
13,烧录结果

第七周

三,DMA方式发送数据

1,创建工程
设置RCC
在这里插入图片描述

2,设置串口
在这里插入图片描述
点击USATR1
设置MODE为异步通信(Asynchronous)
基础参数:波特率为115200 Bits/s。传输数据长度为8 Bit。奇偶检验无,停止位1 接收和发送都使能
GPIO引脚自动设置 USART1_RX/USART_TX
NVIC Settings 一栏使能接收中断
在这里插入图片描述
3,DMA设置
在这里插入图片描述
点击DMASettings 点击 Add 添加通道
选择USART_RX USART_TX 传输速率设置为中速
DMA传输模式为正常模式
DMA内存地址自增,每次增加一个Byte(字节)
在这里插入图片描述
4,时钟设置
在这里插入图片描述
选择外部时钟HSE 8MHz
PLL锁相环倍频9倍
系统时钟来源选择为PLL
设置APB1分频器为 /2
使能CSS监视时钟

5,项目文件设置在这里插入图片描述
6,配置下载工程
在这里插入图片描述
在这里插入图片描述
7,在main.C中添加

uint8_t Senbuff[] = "Hello world!";  //定义数据发送数组

在这里插入图片描述

while循环

   while (1)
  {
    /* USER CODE END WHILE */
			HAL_UART_Transmit_DMA(&huart1, (uint8_t *)Senbuff, sizeof(Senbuff));
	        HAL_Delay(1000);
    /* USER CODE BEGIN 3 */
  }

在这里插入图片描述

8,串口测试
在这里插入图片描述

四,总结

  通过这次实验,我充分了解学习了stm32中断、DMA通信原理和编程方法,使用stm32tubemx和HAL库这两种不同的方法完成了实验题目,同时也对这两种方法进行了深入学习。实验过程中遇到很多困难,不断试错,调试,终于完成了实验要求。

五,参考

stm32中断实现LED灯亮灭
HAL库中断方式进行串口通信
HAL库 STM32CubeMX教程十一—DMA (串口DMA发送接收)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值