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

打开网站出现directory无锡网站建设无锡

打开网站出现directory,无锡网站建设无锡,绑定云监控netsdk出错,中文建站模板文章目录 一、 理论部分1.中断系统2.中断执行流程3.NVIC的基本结构4.EXTI介绍5.AFIO复用IO口 二、实验目的#xff1a;学习stm32中断原理和开发编程方法。使用标准完成以下任务#xff1a;#xff08;一#xff09;实验一 开关控制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端一管脚接一个LEDGPIOB端口一引脚接一个开关用杜邦线模拟代替。采用中断模式编程当开关接高电平时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.hvoid 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);//配置NVICNested 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);//配置EXTIExternal 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.huint8_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.hint 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_IRQChannelPreemptionPriority3; //设置抢占主优先级 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 i0;i17;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 RDataUSART_ReceiveData(USART1);if(RData s){status 0;}else if (RData t){status 1;}} 2.运行结果 三实验三 接收字符串控制发送数据 1.代码部分 #include stm32f10x.h // Device header #include Delay.hvoid 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_IRQChannelPreemptionPriority3; //设置抢占主优先级 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 i0;i17;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 i0;i20;i){RDataArray[i]0;} }void USART1_IRQHandler(void) {int i0;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.w-s-a.com/news/245962/

相关文章:

  • 石狮网站建设哪家好wordpress 3.9 漏洞
  • 为何建设单位网站找网络推广策畿
  • 用网站模板做网站动漫制作专业学校前十名
  • 网页 代码怎么做网站网站建设与维护课程设计
  • 网站制作哪家公司好企业名录联系电话
  • 做的网站怎么上传到网上wordpress图片之间空一行
  • 腾讯云建设网站视频vi报价单
  • 个人网站发布怎么做建设银行网站收款怎么打明细
  • 网站整体色调网站建设都有什么类型
  • 比较简洁大方的网站软件工程四大方向
  • 大家称赞的网站建设常德小学报名网站
  • 做网站怎么建文件夹百度网盘搜索神器
  • 企业有域名怎么做网站淘宝推广平台
  • 学网站开发去哪学药品销售推广方案
  • 哔哩哔哩h5播放器深圳网站seo外包公司哪家好
  • asp做的手机网站wordpress 文章title
  • 网站验证码目录wordpress内嵌播放器
  • 文明网网站建设南昌市建设规费标准网站
  • 安康有建网站的公司吗做网站用什么网名好
  • 济南网站制作哪家专业西安市城乡建设网官方网站
  • 网站建设有趣小游戏怎样让网站优化的方式
  • 昭通做网站儿童编程教学入门教程
  • eclipse静态网站开发软文广告投放平台
  • 网站建设教学视频济南做网站需要多少钱
  • 网站免费做软件市工商联官方网站建设方案
  • 网站建设大体包含英铭长沙网站建设
  • 网站建设培训学校北京如何搜索网站
  • discuz论坛模板哪些网站容易做seo优化
  • 渭南公司做网站网站建设互联网推广
  • 公司网站app怎么做杭州建设局网站