ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

STM32F103 调试记录:标准库流水灯 + HAL 外部中断按键启停

STM32F103 调试记录:标准库流水灯 + HAL 外部中断按键启停 STM32F103 调试记录标准库流水灯 HAL 外部中断按键启停标准外设库GPIO 流水灯 Keil 逻辑分析仪仿真一、创建一个keil工程Keil 工程创建打开 Keil MDK新建工程选择 STM32F103C8保存至 User 文件夹。在工程窗口新建分组User、StdPeriph、CMSIS并依次添加对应源码文件。工程目录搭建如图编写LED代码#includestm32f10x.hvoiddelay_1s(void){volatileunsignedinti,j;for(i0;i720;i)for(j0;j1000;j);}intmain(void){RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);GPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_ModeGPIO_Mode_Out_PP;GPIO_InitStructure.GPIO_PinGPIO_Pin_1|GPIO_Pin_3|GPIO_Pin_5;GPIO_InitStructure.GPIO_SpeedGPIO_Speed_50MHz;GPIO_Init(GPIOA,GPIO_InitStructure);while(1){GPIO_WriteBit(GPIOA,GPIO_Pin_1,Bit_SET);//PA1高电平GPIO_WriteBit(GPIOA,GPIO_Pin_3,Bit_RESET);GPIO_WriteBit(GPIOA,GPIO_Pin_5,Bit_RESET);delay_1s();GPIO_WriteBit(GPIOA,GPIO_Pin_1,Bit_RESET);GPIO_WriteBit(GPIOA,GPIO_Pin_3,Bit_SET);//PA3高电平GPIO_WriteBit(GPIOA,GPIO_Pin_5,Bit_RESET);delay_1s();GPIO_WriteBit(GPIOA,GPIO_Pin_1,Bit_RESET);GPIO_WriteBit(GPIOA,GPIO_Pin_3,Bit_RESET);GPIO_WriteBit(GPIOA,GPIO_Pin_5,Bit_SET);//PA5高电平delay_1s();}}上板结果video_20260929_220118使用Keil 逻辑分析仪仿真观察波形1依次设置2进入仿真setup设置3开始仿真得到波形计算得到一个周期实际约为0.663468sHAL 外部中断按键一、先用STM32CubeMX生成一个项目用keil打开得到该项目配置二、编写代码#includemain.hvolatileuint8_trun_flag1;// 1运行 0暂停volatileuint8_tkey_pending0;// 中断只设置这个标志volatileuint32_ttick_old0;volatileuint8_tled_state0;voidSystemClock_Config(void);staticvoidMX_GPIO_Init(void);voidEXTI0_IRQHandler(void){HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_0);}intmain(void){HAL_Init();HAL_NVIC_SetPriorityGrouping(NVIC_PRIORITYGROUP_4);SystemClock_Config();MX_GPIO_Init();GPIOA-BSRR(GPIO_PIN_116)|(GPIO_PIN_316)|(GPIO_PIN_516);tick_oldHAL_GetTick();/* 按键状态机 */uint8_tkey_state0;while(1){/* 按键处理 */if(key_state0){if(key_pending){key_pending0;HAL_Delay(20);if(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_0)GPIO_PIN_RESET){run_flag!run_flag;key_state1;}}}else{if(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_0)GPIO_PIN_SET){HAL_Delay(20);if(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_0)GPIO_PIN_SET){key_state0;key_pending0;}}}/* 流水灯 */if(run_flag1){if(HAL_GetTick()-tick_old500){tick_oldHAL_GetTick();led_state;switch(led_state%3){case0:/* PA1 亮PA3/PA5 灭 */GPIOA-BSRRGPIO_PIN_1|(GPIO_PIN_316)|(GPIO_PIN_516);break;case1:/* PA3 亮PA1/PA5 灭 */GPIOA-BSRR(GPIO_PIN_116)|GPIO_PIN_3|(GPIO_PIN_516);break;case2:/* PA5 亮PA1/PA3 灭 */GPIOA-BSRR(GPIO_PIN_116)|(GPIO_PIN_316)|GPIO_PIN_5;break;}}}}}/* 中断回调只打标志 */voidHAL_GPIO_EXTI_Callback(uint16_tGPIO_Pin){if(GPIO_PinGPIO_PIN_0){key_pending1;}}/* 系统时钟 72MHz */voidSystemClock_Config(void){RCC_OscInitTypeDef RCC_OscInitStruct{0};RCC_ClkInitTypeDef RCC_ClkInitStruct{0};RCC_OscInitStruct.OscillatorTypeRCC_OSCILLATORTYPE_HSE;RCC_OscInitStruct.HSEStateRCC_HSE_ON;RCC_OscInitStruct.HSEPredivValueRCC_HSE_PREDIV_DIV1;RCC_OscInitStruct.HSIStateRCC_HSI_ON;RCC_OscInitStruct.PLL.PLLStateRCC_PLL_ON;RCC_OscInitStruct.PLL.PLLSourceRCC_PLLSOURCE_HSE;RCC_OscInitStruct.PLL.PLLMULRCC_PLL_MUL9;if(HAL_RCC_OscConfig(RCC_OscInitStruct)!HAL_OK)Error_Handler();RCC_ClkInitStruct.ClockTypeRCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK|RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;RCC_ClkInitStruct.SYSCLKSourceRCC_SYSCLKSOURCE_PLLCLK;RCC_ClkInitStruct.AHBCLKDividerRCC_SYSCLK_DIV1;RCC_ClkInitStruct.APB1CLKDividerRCC_HCLK_DIV2;RCC_ClkInitStruct.APB2CLKDividerRCC_SYSCLK_DIV1;if(HAL_RCC_ClockConfig(RCC_ClkInitStruct,FLASH_LATENCY_2)!HAL_OK)Error_Handler();}/* GPIO 初始化 */staticvoidMX_GPIO_Init(void){GPIO_InitTypeDef GPIO_InitStruct{0};__HAL_RCC_GPIOA_CLK_ENABLE();__HAL_RCC_AFIO_CLK_ENABLE();/* PA1、PA3、PA5 推挽输出 */GPIO_InitStruct.PinGPIO_PIN_1|GPIO_PIN_3|GPIO_PIN_5;GPIO_InitStruct.ModeGPIO_MODE_OUTPUT_PP;GPIO_InitStruct.PullGPIO_NOPULL;GPIO_InitStruct.SpeedGPIO_SPEED_FREQ_LOW;HAL_GPIO_Init(GPIOA,GPIO_InitStruct);/* PA0 下降沿中断内部上拉 */GPIO_InitStruct.PinGPIO_PIN_0;GPIO_InitStruct.ModeGPIO_MODE_IT_FALLING;GPIO_InitStruct.PullGPIO_PULLUP;HAL_GPIO_Init(GPIOA,GPIO_InitStruct);HAL_NVIC_SetPriority(EXTI0_IRQn,1,0);HAL_NVIC_EnableIRQ(EXTI0_IRQn);}/* 错误处理 */voidError_Handler(void){__disable_irq();while(1){}}#ifdefUSE_FULL_ASSERTvoidassert_failed(uint8_t*file,uint32_tline){}#endifvideo_20260929_204202
返回列表