当前位置: 首页 > news >正文

重庆免费做网站谷歌网页版入口在线

重庆免费做网站,谷歌网页版入口在线,代做施组 方案的网站,kesioncms企业网站蓝色模板文章目录 一、 理论部分1.中断系统2.中断执行流程3.NVIC的基本结构4.EXTI介绍5.AFIO复用IO口 二、实验目的:学习stm32中断原理和开发编程方法。使用标准完成以下任务:(一)实验一 开关控制LED的亮灭1.代码部分2.运行结果 &#xff…

文章目录

  • 一、 理论部分
    • 1.中断系统
    • 2.中断执行流程
    • 3.NVIC的基本结构
    • 4.EXTI介绍
    • 5.AFIO复用IO口
  • 二、实验目的:学习stm32中断原理和开发编程方法。使用标准完成以下任务:
    • (一)实验一 开关控制LED的亮灭
      • 1.代码部分
      • 2.运行结果
    • (二)实验二 接收单个字符控制发送数据
      • 1.代码部分
      • 2.运行结果
    • (三)实验三 接收字符串控制发送数据
      • 1.代码部分
      • 2.运行结果
  • 三、总结

一、 理论部分

1.中断系统

在这里插入图片描述

2.中断执行流程

在这里插入图片描述

3.NVIC的基本结构

在这里插入图片描述

在这里插入图片描述

4.EXTI介绍

在这里插入图片描述在这里插入图片描述

5.AFIO复用IO口

在这里插入图片描述

二、实验目的:学习stm32中断原理和开发编程方法。使用标准完成以下任务:

用stm32F103核心板的GPIOA端一管脚接一个LED,GPIOB端口一引脚接一个开关(用杜邦线模拟代替)。采用中断模式编程,当开关接高电平时,LED亮灯;接低电平时,LED灭灯。
可参考教材课件上的6.4.3示例
采用串口中断方式重做上周的串口通信作业,分别实现:1)当stm32接收到字符“s”时,停止持续发送“hello windows!”; 当接收到字符“t”时,持续发送“hello windows!”(提示:采用一个全局标量做信号灯);2)当stm32接收到字符“stop stm32!”时,停止持续发送“hello windows!”; 当接收到字符“go stm32!”时,持续发送“hello windows!”(提示:要将接收到的连续字符保存到一个字符数组里,进行判别匹配。写一个接收字符串的函数。

(一)实验一 开关控制LED的亮灭

1.代码部分

//exti_key.c文件
#include "exti_key.h"
#include "misc.h"void EXTI_Key_Init()
{RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_AFIO,ENABLE);  //打开GPIOA和复用输入输出口的时钟//配置GPIO口GPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_Mode = GPIO_Pin_3;     GPIO_InitStructure.GPIO_Pin = GPIO_Mode_IN_FLOATING;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA,&GPIO_InitStructure);//配置NVIC(Nested Vectored Interrupt Controller:嵌套向量中断控制器)NVIC_InitTypeDef NVIC_InitStructure;NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);NVIC_InitStructure.NVIC_IRQChannel = EXTI3_IRQn;NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;NVIC_Init(&NVIC_InitStructure);//配置EXTI(External Interrupt/Event Controller:外部中断/事件控制器)EXTI_InitTypeDef EXTI_InitStructure;EXTI_ClearITPendingBit(EXTI_Line3);GPIO_EXTILineConfig(GPIO_PortSourceGPIOA,GPIO_PinSource3);EXTI_InitStructure.EXTI_Line = EXTI_Line3;EXTI_InitStructure.EXTI_LineCmd = ENABLE;EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;EXTI_Init(&EXTI_InitStructure);}
#include "stm32f10x.h"  
#include "exti_key.h"
#include "LED.h"uint8_t led = 1;
int main()
{GPIO_WriteBit(GPIOB,GPIO_Pin_5,Bit_SET); //默认为熄灭EXTI_Key_Init();while(1){}
}void EXTI3_IRQHandler()
{if(EXTI_GetITStatus(EXTI_Line3) != RESET ){led = ~led;if(led == 1){GPIO_WriteBit(GPIOB,GPIO_Pin_5,Bit_SET);}else{GPIO_WriteBit(GPIOB,GPIO_Pin_5,Bit_SET);}		EXTI_ClearITPendingBit(EXTI_Line3);}}

2.运行结果

20240519_002

(二)实验二 接收单个字符控制发送数据

采用串口中断方式,当stm32接收到1个字符“s”时,停止持续发送“hello windows!”; 当接收到1个字符“t”时,持续发送“hello windows!”(提示:采用一个全局标量做信号灯);

1.代码部分

#include "stm32f10x.h"                  // Device header
#include "Delay.h"int status = 0;//设置是否发送数据的标志位
int main()
{	//开启GPIOA和USART1的时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_USART1,ENABLE);//实例化控制器的对象GPIO_InitTypeDef GPIO_InitStructure;USART_InitTypeDef USART_InitStructure;//先配置GPIO控制器//1.设置PA9为复用推挽输出模式GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //设置为复用推挽输出GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz ;GPIO_Init(GPIOA,&GPIO_InitStructure);   //老子草了没写这一句,以为只GPIO_Init()一次就可以了,结果忘了这些参数会覆盖的。//2.设置PA10为浮空输入模式GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; //设置为浮空输入GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA,&GPIO_InitStructure);//再配置USART控制器USART_InitStructure.USART_BaudRate = 9600;USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;  //硬件流控制:选择无流控制USART_InitStructure.USART_Mode = USART_Mode_Tx |USART_Mode_Rx; //模式选择发送和接收USART_InitStructure.USART_Parity = USART_Parity_No;USART_InitStructure.USART_StopBits = USART_StopBits_1;USART_InitStructure.USART_WordLength = USART_WordLength_8b;USART_ClearFlag(USART1, USART_FLAG_TC);USART_Init(USART1,&USART_InitStructure);  //初始化串口1//配置中断源USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);//当USART串口接收到数据的时候,就触发USART中断// 4.给这个中断源配置相应的抢占优先级和执行优先级NVIC_InitTypeDef  NVIC_InitStructure;NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;      NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=3; //设置抢占(主)优先级    NVIC_InitStructure.NVIC_IRQChannelSubPriority =3;      // 设置子优先级   NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;             NVIC_Init(&NVIC_InitStructure);    USART_Cmd(USART1,ENABLE);			//使能串口1char transmitArray[18]={"hello windows! \r\n "};   //windows系统串口发送时,用回车换行组合 (\r\n) 来实现换行while(1){	if(status == 1) //标志位status = 1 发送{for(int i=0;i<=17;i++){USART_SendData(USART1,transmitArray[i]);while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)== RESET);  //RESET就是0,表示不符合,TXE的E是empty,表示发送寄存器不符合为空,即里面有东西,还在发送。	}Delay_s(1);}}}void USART1_IRQHandler(void)
{while(USART_GetITStatus(USART1,USART_IT_RXNE) == RESET ) //这里不再是USART_GetFlagStatus、USART_FLAG_RXNE,而是USART_GetITStatus、SART_IT_RXNE,要换成中断{};  uint8_t RData=USART_ReceiveData(USART1);if(RData == 's'){status = 0;}else if (RData == 't'){status = 1;}}

2.运行结果

在这里插入图片描述

(三)实验三 接收字符串控制发送数据

1.代码部分

#include "stm32f10x.h"                  // Device header
#include "Delay.h"void InitRDataArray();int status = 0;//设置是否发送数据的标志位char RDataArray[20];//接收指令的字符数组int main()
{	//开启GPIOA和USART1的时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_USART1,ENABLE);//实例化控制器的对象GPIO_InitTypeDef GPIO_InitStructure;USART_InitTypeDef USART_InitStructure;//先配置GPIO控制器//1.设置PA9为复用推挽输出模式GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //设置为复用推挽输出GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz ;GPIO_Init(GPIOA,&GPIO_InitStructure);   //老子草了没写这一句,以为只GPIO_Init()一次就可以了,结果忘了这些参数会覆盖的。//2.设置PA10为浮空输入模式GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; //设置为浮空输入GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA,&GPIO_InitStructure);//再配置USART控制器USART_InitStructure.USART_BaudRate = 9600;USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;  //硬件流控制:选择无流控制USART_InitStructure.USART_Mode = USART_Mode_Tx |USART_Mode_Rx; //模式选择发送和接收USART_InitStructure.USART_Parity = USART_Parity_No;USART_InitStructure.USART_StopBits = USART_StopBits_1;USART_InitStructure.USART_WordLength = USART_WordLength_8b;USART_ClearFlag(USART1, USART_FLAG_TC);USART_Init(USART1,&USART_InitStructure);  //初始化串口1//配置中断源USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);//当USART串口接收到数据的时候,就触发USART中断// 4.给这个中断源配置相应的抢占优先级和执行优先级NVIC_InitTypeDef  NVIC_InitStructure;NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;      NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=3; //设置抢占(主)优先级    NVIC_InitStructure.NVIC_IRQChannelSubPriority =3;      // 设置子优先级   NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;             NVIC_Init(&NVIC_InitStructure);    USART_Cmd(USART1,ENABLE);			//使能串口1char transmitArray[18]={"hello windows! \r\n "};   //windows系统串口发送时,用回车换行组合 (\r\n) 来实现换行InitRDataArray();  //初始化用来接收指令的字符数组while(1){	if(status == 1) //标志位status = 1 发送{for(int i=0;i<=17;i++){USART_SendData(USART1,transmitArray[i]);while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)== RESET);  //RESET就是0,表示不符合,TXE的E是empty,表示发送寄存器不符合为空,即里面有东西,还在发送。	}Delay_s(1);}}}//初始化字符数组
void InitRDataArray()
{for(int i=0;i<20;i++){RDataArray[i]=0;}
}void USART1_IRQHandler(void)
{int i=0;if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)//判断中断是接收数据中断{RDataArray[i]= USART_ReceiveData(USART1); //接收字符i++;} if (strcmp(RDataArray,"stop stm32!")==0){status = 0;//结束发送InitRDataArray();  //初始化用来接收指令的字符数组}
else if (strcmp(RDataArray,"go stm32!")==0){status = 1;//发送数据InitRDataArray();  //初始化用来接收指令的字符数组}
}

2.运行结果

在这里插入图片描述

三、总结

我刚把串口通信学得差不多,现在又来了这个中断,中断我感觉比之前学的东西都要难。我也说不出为什么,就是觉得它很抽象。

http://www.dinnco.com/news/12208.html

相关文章:

  • 做网站设计师能10年赚100万吗咸阳网站建设公司
  • c 如何做公司网站可以看国外网站的浏览app
  • 湖南网站建设 安全还踏实磐石网络qq引流推广软件免费
  • 清远医院网站建设费用抖音广告代运营
  • 网站建设安全性指标什么是关键词排名优化
  • 区块链技术和网站开发结合关键词搜索技巧
  • 深圳网站设计公司设计网络营销百度百科
  • 网站建设用哪个秦皇岛seo优化
  • 织梦网站加网站地图短视频运营是做什么的
  • 高端网站建设知识百度快速排名工具
  • 纺织品做外贸一般在哪个网站上网络营销的新特点
  • 丹东谁家做网站宁波seo的公司联系方式
  • 中国物流网站最吸引人的营销广告文案
  • 鹰潭网站建设公司seo培训中心
  • 温州免费个人网站制作公司自动交换友情链接
  • 小公司做网站用哪种服务器聊城疫情最新消息
  • 怎么做网站在谷歌推广如何做网上引流
  • 区域销售网站什么做永久不收费免费的软件
  • 昆山做网站企业百度免费咨询
  • 免费网站建设找哪家互联网广告平台代理
  • 成都搭建网站上海搜索引擎优化1
  • 公司营业执照可以做几个网站营销型网站建设的公司
  • 新乡百度网站推广工具seo岗位培训
  • 哪个网站做美食视频网站好app引流推广方法
  • 怎么把淘宝店放到自己做的网站去seo职业技能培训班
  • 郴州 网站建设推广免费
  • 石家庄java开发做网站资源最全的网盘搜索引擎
  • 全面做好政府网站建设管理工作的通知网站seo谷歌
  • 做网站 图文教程打广告在哪里打最有效
  • 免费建站网站一区黄在线国产淘宝关键词排名查询工具免费