1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > 采用串口中断方式实现串口通信

采用串口中断方式实现串口通信

时间:2023-12-25 18:16:16

相关推荐

采用串口中断方式实现串口通信

文章目录

前言一、中断介绍1、中断方式2、中断优先级3、中断向量二、利用STM32CubeMX配置项目三、在keil配置代码四、实际效果五、总结六、参考资料

前言

一、中断介绍

1、中断方式

中断方式

中断方式是处理器和外部设备的数据传输方式。一方通过申请中断的方式与另一方进行数据传输,收发双方可以并行工作。

中断系统

中断装置和中断处理程序统称为中断系统。

中断系统是计算机的重要组成部分。实时控制、故障自动处理、计算机与外围设备间的数据传送往往采用中断系统。中断系统的应用大大提高了计算机效率。

数据传输方式(处理器和外部设备之间)

中断全过程

中断发生:当CPU在处理某一事件m,发生了另一事件n,请求CPU迅速去处理中断处理:CPU暂停当前的工作,转去处理事件n中断返回:当CPU将时间n处理完以后再回到事件m中被暂停的地方继续处理

HAL库外部中断处理流程

中断的作用

2、中断优先级

处理器会根据不同中断的重要程序设置不同的优先等级。处理器在遇到高优先级的中断时可以打断低优先级的中断,反之则不行。

因为中断优先级的问题会产生中断嵌套的情况,就类似于函数里面又嵌入了一个函数,但在中断此处的嵌套有一个重要特点就是被嵌套的中断优先级高于嵌套该中断的优先级,即低高优先级中断嵌套在优先级中断里面。

3、中断向量

中断服务程序

在响应一个特定中断的时候,处理器会执行一个函数,该函数一般称为中断处理程序挥着中断服务程序。

中断向量和中断向量表

中断向量:中断服务程序在内存中的入口地址成为中断向量。中断向量表:把系统中所有的中断向量集中起来放到存储器的某一区域内,这个存放中断向量的存储区就叫中断向量表

启动文件:startup_stm32f411xe.s

查找中断向量

编号:计算机系统对每一个中断源进行编号,此号码称作中断类型号查表:根据中断内型号,到中断向量表中找到对应的表项执行:取出标项内容,即该中断源对应的中断拂去程序地址,进入该程序执行相应操作

中断响应过程

二、利用STM32CubeMX配置项目

打开STM32CubeMX新建项目

选择自己的芯片型号,并勾选

设置RCC

设置SYS

设置USART

设置NVIC

创建项目

三、在keil配置代码

1.打开通过CubeMX生成的项目

2.在main函数前定义全局变量

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

3.在main函数中设置接收中断

函数说明:

函数原型

HAL_UART_Receive_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size)

功能

功能:串口中断接收,以中断方式接收指定长度数据。

大致过程是,设置数据存放位置,接收数据长度,然后使能串口接收中断。

接收到数据时,会触发串口中断。

再然后,串口中断函数处理,直到接收到指定长度数据

而后关闭中断,进入中断接收回调函数,不再触发接收中断。(只触发一次中断)

参数

UART_HandleTypeDef *huartUATR的别名 huart1 *pData接收到的数据存放地址Size 接收的字节数

HAL_UART_Receive_IT(&huart1, (uint8_t *)&c, 1);

4.main函数中的while循环里面添加传输代码

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

5.在main函数下面重写中断处理函数

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

编译并创建hex文件

四、实际效果

当发送s以后将会不断出现hello Windows

发送t以后则停止输出

五、总结

在创建项目的时候,从STM32CubeMX到keil上面出现了配置及设置问题,从最开的创建项目开始去查找相关问题,发现配置的缺失。在整个实验中,设备配置、时钟设置等都有相应的要求,与之前的设置要有区分。这一整个实验流程操作下来,对于利用STM32CubeMX创建工程项目结合keil实现串口通信等实验有了一定的了解,同时大概清晰了对于外设和时钟的处理,并对中断有了更深层次的认识。

六、参考资料

/qq_47281915/article/details/121053903

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。