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

网站帮助页面设计邯郸人才网

网站帮助页面设计,邯郸人才网,企业微信小程序入口,wordpress标签内链插件问题产生 我在学习中断的过程中#xff0c;使用EXTI15外部中断#xff0c;在其中加入HAL_Delay();就会发生报错 错误地方 其它地方配置 问题原因 在中断服务例程#xff08;ISR#xff09;中使用 HAL_Delay() 会导致问题的原因是#xff1a; 阻塞性#xff1a; HAL_D…问题产生 我在学习中断的过程中使用EXTI15外部中断在其中加入HAL_Delay();就会发生报错 错误地方 其它地方配置 问题原因 在中断服务例程ISR中使用 HAL_Delay() 会导致问题的原因是 阻塞性 HAL_Delay() 是一个阻塞函数它通过不断地轮询系统时钟来实现延迟。在 ISR 中调用此函数会阻塞中断处理使得其他中断无法被及时响应导致系统的实时性降低。 中断禁止 在某些微控制器中进入中断处理程序时会自动禁止其他中断。这意味着在 HAL_Delay() 执行期间其他中断将无法被触发从而可能导致系统出现未定义行为或错失重要事件。 在嵌入式系统中尤其是使用 STM32 等微控制器时并不是说同一时间只能进行一个中断而是中断是通过优先级和嵌套来管理的。 中断优先级 优先级每个中断可以被设置优先级。当多个中断同时发生时只有优先级更高的中断会被处理。中断嵌套如果启用了中断嵌套通常在 NVIC 配置中设置高优先级的中断可以打断低优先级的中断。 HAL_Delay() 不应该放在任何中断服务例程ISR中使用。原因如下 阻塞性HAL_Delay() 是一个阻塞函数会使当前执行的任务停止直到延迟时间结束。这会导致该中断无法及时响应其他中断。 中断嵌套在许多微控制器中进入 ISR 时会禁用其他中断。如果在 ISR 中调用 HAL_Delay()那么在此期间所有其他中断都会被屏蔽可能导致系统的实时性下降和错失重要事件。 系统稳定性长时间阻塞可能导致系统不稳定甚至造成死锁或未定义行为。 解决方法 1.按键状态机模式 状态机是一个抽象概念,表示把一个过程抽象为若干个状态之间的切换,这些状态之间 存在一定的联系。状态机的设计主要包括4个要素: 1. 现态:是指当前所处的状态。 2. 条件:当一个条件满足,将会触发一个动作,或者执行一次状态的迁移。 3. 动作:表示条件满足后执行动作。动作执行完毕后,可以迁移到新的状态,也可以              仍旧保持原状态。动作要素不是必需的,当条件满足后,也可以不执行任何              动作,直接迁移到新状态。 4. 次态:表示条件满足后要迁往的新状态。 1定义枚举变量 typedef enum{IDLE,//按键按下PRESSED,//按键确定状态RELEASED//按键释放}ButtonState; 2定义结构体 typedef struct {ButtonState State;}KeyState; 3 初始化按键状态定义Key变量判断是否开启按键判断 uint8_t Key0;void KeyInit(KeyState*KeyKey){Key1;KeyKey-StateIDLE;} 4按键三种状态判断 void Key_State_Judge(uint8_t *Key ,KeyState*KeyKey){if(*Key1){switch(KeyKey-State){case IDLE:if(HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_1)SET){KeyKey-StateIDLE;}else{KeyKey-StatePRESSED;}break;case PRESSED:if(HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_1)SET){KeyKey-StateIDLE;}else{KeyKey-StateRELEASED;HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_1);}break;case RELEASED:if(HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_1)SET){KeyKey-StateIDLE;}else{KeyKey-StateRELEASED;}break;}}} 5总代码演示 /* USER CODE BEGIN Header */ /********************************************************************************* file : main.c* brief : Main program body******************************************************************************* attention** Copyright (c) 2024 STMicroelectronics.* All rights reserved.** This software is licensed under terms that can be found in the LICENSE file* in the root directory of this software component.* If no LICENSE file comes with this software, it is provided AS-IS.********************************************************************************/ /* USER CODE END Header */ /* Includes ------------------------------------------------------------------*/ #include main.h/* Private includes ----------------------------------------------------------*/ /* USER CODE BEGIN Includes *//* USER CODE END Includes *//* Private typedef -----------------------------------------------------------*/ /* USER CODE BEGIN PTD *//* USER CODE END PTD *//* Private define ------------------------------------------------------------*/ /* USER CODE BEGIN PD *//* USER CODE END PD *//* Private macro -------------------------------------------------------------*/ /* USER CODE BEGIN PM *//* USER CODE END PM *//* Private variables ---------------------------------------------------------*//* USER CODE BEGIN PV *//* USER CODE END PV *//* Private function prototypes -----------------------------------------------*/ void SystemClock_Config(void); static void MX_GPIO_Init(void); /* USER CODE BEGIN PFP *//* USER CODE END PFP *//* Private user code ---------------------------------------------------------*/ /* USER CODE BEGIN 0 *//* USER CODE END 0 *//*** brief The application entry point.* retval int*/ int main(void) {/* USER CODE BEGIN 1 *//* USER CODE END 1 *//* MCU Configuration--------------------------------------------------------*//* Reset of all peripherals, Initializes the Flash interface and the Systick. */HAL_Init();/* USER CODE BEGIN Init *//* USER CODE END Init *//* Configure the system clock */SystemClock_Config();/* USER CODE BEGIN SysInit *//* USER CODE END SysInit *//* Initialize all configured peripherals */MX_GPIO_Init();/* USER CODE BEGIN 2 */typedef enum{IDLE,//按键按下PRESSED,//按键确定状态RELEASED//按键释放}ButtonState;typedef struct {ButtonState State;}KeyState;uint8_t Key0;void KeyInit(KeyState*KeyKey){Key1;KeyKey-StateIDLE;}void Key_State_Judge(uint8_t *Key ,KeyState*KeyKey){if(*Key1){switch(KeyKey-State){case IDLE:if(HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_1)SET){KeyKey-StateIDLE;}else{KeyKey-StatePRESSED;}break;case PRESSED:if(HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_1)SET){KeyKey-StateIDLE;}else{KeyKey-StateRELEASED;HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_1);}break;case RELEASED:if(HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_1)SET){KeyKey-StateIDLE;}else{KeyKey-StateRELEASED;}break;}}}KeyState KeyKey;KeyInit(KeyKey);/* USER CODE END 2 *//* Infinite loop *//* USER CODE BEGIN WHILE */while (1){Key_State_Judge(Key,KeyKey);/* USER CODE END WHILE *//* USER CODE BEGIN 3 */}/* USER CODE END 3 */ }/*** brief System Clock Configuration* retval None*/ void SystemClock_Config(void) {RCC_OscInitTypeDef RCC_OscInitStruct {0};RCC_ClkInitTypeDef RCC_ClkInitStruct {0};/** Initializes the RCC Oscillators according to the specified parameters* in the RCC_OscInitTypeDef structure.*/RCC_OscInitStruct.OscillatorType RCC_OSCILLATORTYPE_HSI;RCC_OscInitStruct.HSIState RCC_HSI_ON;RCC_OscInitStruct.HSICalibrationValue RCC_HSICALIBRATION_DEFAULT;RCC_OscInitStruct.PLL.PLLState RCC_PLL_NONE;if (HAL_RCC_OscConfig(RCC_OscInitStruct) ! HAL_OK){Error_Handler();}/** Initializes the CPU, AHB and APB buses clocks*/RCC_ClkInitStruct.ClockType RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK|RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;RCC_ClkInitStruct.SYSCLKSource RCC_SYSCLKSOURCE_HSI;RCC_ClkInitStruct.AHBCLKDivider RCC_SYSCLK_DIV1;RCC_ClkInitStruct.APB1CLKDivider RCC_HCLK_DIV1;RCC_ClkInitStruct.APB2CLKDivider RCC_HCLK_DIV1;if (HAL_RCC_ClockConfig(RCC_ClkInitStruct, FLASH_LATENCY_0) ! HAL_OK){Error_Handler();} }/*** brief GPIO Initialization Function* param None* retval None*/ static void MX_GPIO_Init(void) {GPIO_InitTypeDef GPIO_InitStruct {0}; /* USER CODE BEGIN MX_GPIO_Init_1 */ /* USER CODE END MX_GPIO_Init_1 *//* GPIO Ports Clock Enable */__HAL_RCC_GPIOA_CLK_ENABLE();__HAL_RCC_GPIOB_CLK_ENABLE();/*Configure GPIO pin Output Level */HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1, GPIO_PIN_RESET);/*Configure GPIO pin : PA1 */GPIO_InitStruct.Pin GPIO_PIN_1;GPIO_InitStruct.Mode GPIO_MODE_OUTPUT_PP;GPIO_InitStruct.Pull GPIO_NOPULL;GPIO_InitStruct.Speed GPIO_SPEED_FREQ_LOW;HAL_GPIO_Init(GPIOA, GPIO_InitStruct);/*Configure GPIO pin : PB1 */GPIO_InitStruct.Pin GPIO_PIN_1;GPIO_InitStruct.Mode GPIO_MODE_INPUT;GPIO_InitStruct.Pull GPIO_PULLUP;HAL_GPIO_Init(GPIOB, GPIO_InitStruct);/* USER CODE BEGIN MX_GPIO_Init_2 */ /* USER CODE END MX_GPIO_Init_2 */ }/* USER CODE BEGIN 4 *//* USER CODE END 4 *//*** brief This function is executed in case of error occurrence.* retval None*/ void Error_Handler(void) {/* USER CODE BEGIN Error_Handler_Debug *//* User can add his own implementation to report the HAL error return state */__disable_irq();while (1){}/* USER CODE END Error_Handler_Debug */ }#ifdef USE_FULL_ASSERT /*** brief Reports the name of the source file and the source line number* where the assert_param error has occurred.* param file: pointer to the source file name* param line: assert_param error line source number* retval None*/ void assert_failed(uint8_t *file, uint32_t line) {/* USER CODE BEGIN 6 *//* User can add his own implementation to report the file name and line number,ex: printf(Wrong parameters value: file %s on line %d\r\n, file, line) *//* USER CODE END 6 */ } #endif /* USE_FULL_ASSERT */ 配置图片 2.Delay替换成TIM定时器中断 main.c #include stm32f10x.h // Device header #include Key.h #include OLED.h #include Timer.h #include LED.h uint8_t KeyNum; int main(void) {OLED_Init(); Timer_Init();Key_Init();LED_Init();while (1){KeyNumKey_GetNum();if(KeyNum1){LED1_Turn();}} } Key.c #include stm32f10x.h // Device header #include Delay.h #include Timer.h uint16_t Num;void Delay_TIM() {TIM_Cmd(TIM2, ENABLE);if(Num20){Num0;TIM_Cmd(TIM2, DISABLE);} }/*** 函 数按键初始化* 参 数无* 返 回 值无*/ void Key_Init(void) {/*开启时钟*/RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); //开启GPIOB的时钟/*GPIO初始化*/GPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_Mode GPIO_Mode_IPU;GPIO_InitStructure.GPIO_Pin GPIO_Pin_1 | GPIO_Pin_11;GPIO_InitStructure.GPIO_Speed GPIO_Speed_50MHz;GPIO_Init(GPIOB, GPIO_InitStructure); //将PB1和PB11引脚初始化为上拉输入 }/*** 函 数按键获取键码* 参 数无* 返 回 值按下按键的键码值范围0~2返回0代表没有按键按下* 注意事项此函数是阻塞式操作当按键按住不放时函数会卡住直到按键松手*/ uint8_t Key_GetNum(void) {uint8_t KeyNum 0; //定义变量默认键码值为0if (GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_1) 0) //读PB1输入寄存器的状态如果为0则代表按键1按下{Delay_TIM();while (GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_1) 0); //等待按键松手Delay_TIM(); //置键码为1KeyNum1;}return KeyNum; //返回键码值如果没有按键按下所有if都不成立则键码为默认值0 } void TIM2_IRQHandler(){if(TIM_GetITStatus(TIM2,TIM_IT_Update)SET){Num;TIM_ClearITPendingBit(TIM2, TIM_IT_Update);} } Key.h #ifndef __KEY_H #define __KEY_Hvoid Key_Init(void); uint8_t Key_GetNum(void); void Delay_TIM(); #endif Timer.h #include stm32f10x.h // Device headervoid Timer_Init(void){RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);TIM_InternalClockConfig(TIM2);TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct;TIM_TimeBaseInitStruct.TIM_ClockDivisionTIM_CKD_DIV1;TIM_TimeBaseInitStruct.TIM_CounterModeTIM_CounterMode_Up;TIM_TimeBaseInitStruct.TIM_Period100-1;TIM_TimeBaseInitStruct.TIM_Prescaler720-1;TIM_TimeBaseInitStruct.TIM_RepetitionCounter0;TIM_TimeBaseInit(TIM2, TIM_TimeBaseInitStruct);TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE);NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); NVIC_InitTypeDef NVIC_InitStruct;NVIC_InitStruct.NVIC_IRQChannelTIM2_IRQn ;NVIC_InitStruct.NVIC_IRQChannelCmdENABLE;NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority2;NVIC_InitStruct.NVIC_IRQChannelSubPriority1;NVIC_Init(NVIC_InitStruct);TIM_Cmd(TIM2, DISABLE); } Timer.c #ifndef __Timer_H #define __Timer_Hvoid Timer_Init(void);#endif
文章转载自:
http://www.morning.dzfwb.cn.gov.cn.dzfwb.cn
http://www.morning.hilmwmu.cn.gov.cn.hilmwmu.cn
http://www.morning.xkyst.cn.gov.cn.xkyst.cn
http://www.morning.pxwjp.cn.gov.cn.pxwjp.cn
http://www.morning.tsnwf.cn.gov.cn.tsnwf.cn
http://www.morning.lqqqh.cn.gov.cn.lqqqh.cn
http://www.morning.wbyqy.cn.gov.cn.wbyqy.cn
http://www.morning.kfwqd.cn.gov.cn.kfwqd.cn
http://www.morning.qjfkz.cn.gov.cn.qjfkz.cn
http://www.morning.bzlgb.cn.gov.cn.bzlgb.cn
http://www.morning.prprj.cn.gov.cn.prprj.cn
http://www.morning.wjfzp.cn.gov.cn.wjfzp.cn
http://www.morning.rbqlw.cn.gov.cn.rbqlw.cn
http://www.morning.sfmqm.cn.gov.cn.sfmqm.cn
http://www.morning.bzlfw.cn.gov.cn.bzlfw.cn
http://www.morning.ypnxq.cn.gov.cn.ypnxq.cn
http://www.morning.tgpgx.cn.gov.cn.tgpgx.cn
http://www.morning.cfybl.cn.gov.cn.cfybl.cn
http://www.morning.nytpt.cn.gov.cn.nytpt.cn
http://www.morning.yqndr.cn.gov.cn.yqndr.cn
http://www.morning.jcfdk.cn.gov.cn.jcfdk.cn
http://www.morning.lsbjj.cn.gov.cn.lsbjj.cn
http://www.morning.wpxfk.cn.gov.cn.wpxfk.cn
http://www.morning.zfyfy.cn.gov.cn.zfyfy.cn
http://www.morning.xnzmc.cn.gov.cn.xnzmc.cn
http://www.morning.nbwyk.cn.gov.cn.nbwyk.cn
http://www.morning.lqlhw.cn.gov.cn.lqlhw.cn
http://www.morning.mjkqj.cn.gov.cn.mjkqj.cn
http://www.morning.xxhc.cn.gov.cn.xxhc.cn
http://www.morning.wmhqd.cn.gov.cn.wmhqd.cn
http://www.morning.btqqh.cn.gov.cn.btqqh.cn
http://www.morning.ncqzb.cn.gov.cn.ncqzb.cn
http://www.morning.gqjzp.cn.gov.cn.gqjzp.cn
http://www.morning.vattx.cn.gov.cn.vattx.cn
http://www.morning.kjlia.com.gov.cn.kjlia.com
http://www.morning.yfffg.cn.gov.cn.yfffg.cn
http://www.morning.cwnqd.cn.gov.cn.cwnqd.cn
http://www.morning.dfygx.cn.gov.cn.dfygx.cn
http://www.morning.ktcfl.cn.gov.cn.ktcfl.cn
http://www.morning.dyxlj.cn.gov.cn.dyxlj.cn
http://www.morning.nbiotank.com.gov.cn.nbiotank.com
http://www.morning.kxltf.cn.gov.cn.kxltf.cn
http://www.morning.gnkdp.cn.gov.cn.gnkdp.cn
http://www.morning.kpxnz.cn.gov.cn.kpxnz.cn
http://www.morning.sgtq.cn.gov.cn.sgtq.cn
http://www.morning.qdzqf.cn.gov.cn.qdzqf.cn
http://www.morning.rshs.cn.gov.cn.rshs.cn
http://www.morning.yqgbw.cn.gov.cn.yqgbw.cn
http://www.morning.qgwpx.cn.gov.cn.qgwpx.cn
http://www.morning.dwxqf.cn.gov.cn.dwxqf.cn
http://www.morning.ylmxs.cn.gov.cn.ylmxs.cn
http://www.morning.mqxrx.cn.gov.cn.mqxrx.cn
http://www.morning.gyjld.cn.gov.cn.gyjld.cn
http://www.morning.mzhhr.cn.gov.cn.mzhhr.cn
http://www.morning.fzlk.cn.gov.cn.fzlk.cn
http://www.morning.kwqt.cn.gov.cn.kwqt.cn
http://www.morning.zcqtr.cn.gov.cn.zcqtr.cn
http://www.morning.mtsgx.cn.gov.cn.mtsgx.cn
http://www.morning.lhrxq.cn.gov.cn.lhrxq.cn
http://www.morning.zsrdp.cn.gov.cn.zsrdp.cn
http://www.morning.jtmql.cn.gov.cn.jtmql.cn
http://www.morning.ymjgx.cn.gov.cn.ymjgx.cn
http://www.morning.rtspr.cn.gov.cn.rtspr.cn
http://www.morning.nytqy.cn.gov.cn.nytqy.cn
http://www.morning.jbkcs.cn.gov.cn.jbkcs.cn
http://www.morning.kongpie.com.gov.cn.kongpie.com
http://www.morning.qkrz.cn.gov.cn.qkrz.cn
http://www.morning.jtcq.cn.gov.cn.jtcq.cn
http://www.morning.zsleyuan.cn.gov.cn.zsleyuan.cn
http://www.morning.dtlqc.cn.gov.cn.dtlqc.cn
http://www.morning.tqygx.cn.gov.cn.tqygx.cn
http://www.morning.rnrfs.cn.gov.cn.rnrfs.cn
http://www.morning.hcqd.cn.gov.cn.hcqd.cn
http://www.morning.jpmcb.cn.gov.cn.jpmcb.cn
http://www.morning.hlhqs.cn.gov.cn.hlhqs.cn
http://www.morning.ntqnt.cn.gov.cn.ntqnt.cn
http://www.morning.cctgww.cn.gov.cn.cctgww.cn
http://www.morning.jrhcp.cn.gov.cn.jrhcp.cn
http://www.morning.epeij.cn.gov.cn.epeij.cn
http://www.morning.jcwhk.cn.gov.cn.jcwhk.cn
http://www.tj-hxxt.cn/news/245057.html

相关文章:

  • 建设网站资质查询重庆做网站微信的公司
  • 怎么通过数据库做网站的登录中国建设招标网官方网站
  • 怎么把自己的产品推广出去网站优化的方式
  • 重庆网站首页制作网站建设与网页设计美食
  • 进入建设银行的网站就打不了字品牌推广计划
  • 如何做直播网站网站建设教学工作总结
  • 怎么修改网站后台路径平面设计工作好找吗
  • 廊坊做网站企业教程上海网页设计学校
  • 精品购物网站中国电力建设集团公司网站
  • 广州门户网站贵阳app定制开发
  • 江苏省建设斤网站金阊企业建设网站公司
  • 网站制作中山多语言网站系统
  • 紫网站建设基于php的家具公司网站
  • 特色的南昌网站制作电商业务推广
  • 广东省建设信息网网站微信网站收钱吗
  • 办公软件培训百度seo找哪里
  • 重庆卓光网站建设网站托管代运营
  • 好的公司网站制作通过网站赚钱
  • 网站服务器环境不支持mysql数据库oppo软件商店手机版
  • dw做的网站要多大seo岗位工资
  • 网站常用素材wordpress导航菜单栏
  • 形容网站页面做的好的词语网站搭建免费域名
  • 这个是以前我自己做的一个网站崇明专业做网站
  • 做公司网站别人能看到吗北京值得去的商场
  • 电子商务网站开发岗位职责net开发网站
  • 南宁网站建设及推广建站软件安卓
  • 南通优普高端网站建设大学生网络营销策划书
  • 广州微网站建设怎么样湖南人文科技学院官网
  • 宜兴网站建设价格信息在上海做兼职去哪个网站搜索
  • 惠济免费网站建设网站开发设计有哪些