stm32 hal 学习笔记

· 更新于

halstm32

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(); }`