embedded 原文存档
stm32 hal 学习笔记
1,外部中断
`1,用cube,设置gpio,上升还是下降触发 2,进工程后,在中断函数内 #define KEY1_INT_GPIO_PORT GPIOA #define KEY1_INT_GPIO_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE(); #define KEY1_INT_GPIO_PIN GPIO_PIN_0 #define KEY1_INT_EXTI_IRQ EXTI0_IRQn #define KEY1_IRQHandler EXTI0_IRQHandler void KEY1_IRQHandler(void) { //确保是否产生了EXTI Line中断 if(__HAL_GPIO_EXTI_GET_IT(KEY1_INT_GPIO_PIN) != RESET) { // LED1 取反 LED1_TOGGLE; //清除中断标志位 __HAL_GPIO_EXTI_CLEAR_IT(KEY1_INT_GPIO_PIN); } }`
2,systick定时器
可以查看cotex-m3手册
`static __IO u32 TimingDelay; /** * @brief 启动系统滴答定时器 SysTick * @param 无 * @retval 无 */ void SysTick_Init(void) { /* SystemFrequency / 1000 1ms中断一次 * SystemFrequency / 100000 10us中断一次 * SystemFrequency / 1000000 1us中断一次 */ if (HAL_SYSTICK_Config(SystemCoreClock / 100000)) { /* Capture error */ while (1); } } /** * @brief us延时程序,10us为一个单位 * @param * @arg nTime: Delay_us( 1 ) 则实现的延时为 1 * 10us = 10us * @retval 无 */ void Delay_us(__IO u32 nTime) { TimingDelay = nTime; while(TimingDelay != 0); } /** * @brief 获取节拍程序 * @param 无 * @retval 无 * @attention 在 SysTick 中断函数 SysTick_Handler()调用 */ void TimingDelay_Decrement(void) { if (TimingDelay != 0x00) { TimingDelay--; } } void SysTick_Handler(void) { HAL_IncTick(); TimingDelay_Decrement(); }`