其他分享
首页 > 其他分享> > 通过中断来控制LED灯(STMF103C8+HAL库)

通过中断来控制LED灯(STMF103C8+HAL库)

作者:互联网

呦呦鹿鸣

一、STM32中断介绍

1.1 中断概念

1.2 中断全过程

1.3 中断作用

1.4 中断优先级

二、HAL库的中断处理流程

三、高低电平控制控制LED灯亮和灭

void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin){
	GPIO_PinState b0_pin = HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_0);  // 读取b0的状态
	b0_pin=1-b0_pin;
	switch (GPIO_Pin){//判断引脚
		case GPIO_PIN_0:
			HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1,1-b0_pin);  // 将a1写入与b0相同的电位
			break;
	}
	
}

四、中断实现串口通信

uint8_t aRxBuffer;//接收缓冲中断
uint8_t Uart1_RxBuff[256];//接收缓冲
uint8_t Uart1_Rx_Cnt=0;//接收缓冲计数
uint8_t cAlmStr[]="数据溢出(大于256)";
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
  if(Uart1_Rx_Cnt >= 255)  //溢出判断
	{
		Uart1_Rx_Cnt = 0;
		memset(Uart1_RxBuff,0x00,sizeof(Uart1_RxBuff));
		HAL_UART_Transmit(&huart1, (uint8_t *)&cAlmStr, sizeof(cAlmStr),0xFFFF);	
	}
	else
	{
		Uart1_RxBuff[Uart1_Rx_Cnt++] = aRxBuffer;   //接收数据转存
	
		if((Uart1_RxBuff[Uart1_Rx_Cnt-1] == 0x0A)||(Uart1_RxBuff[Uart1_Rx_Cnt-2] == 0x0D)) //判断结束位
		{
			HAL_UART_Transmit(&huart1, (uint8_t *)&Uart1_RxBuff, Uart1_Rx_Cnt,0xFFFF); //将收到的信息发送出去
			Uart1_Rx_Cnt = 0;
			memset(Uart1_RxBuff,0x00,sizeof(Uart1_RxBuff)); //清空数组
		}
	}
	
	HAL_UART_Receive_IT(&huart1, (uint8_t *)&aRxBuffer, 1);   //再开启接收中断

}
int main(void)
{
 //初始化
  HAL_Init();
  SystemClock_Config();
  MX_GPIO_Init();
  MX_USART1_UART_Init();
 
	
	
	//接收中断函数
	HAL_UART_Receive_IT(&huart1,(uint8_t*)&aRxBuffer,1);
	
  while (1)
  {
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
  }
  /* USER CODE END 3 */
}

五、总结

六、参考

【STM32CubeMX】HAL库中断方式UART串口通信
STM32之中断控制LED灯

标签:RxBuff,HAL,中断,Uart1,UART,GPIO,LED,STMF103C8
来源: https://blog.csdn.net/junseven164/article/details/121066120