通过CubeMX配置,编写IO接收信号串口发送数据的功能-代码讲解含部分生成代码

第二节:实现IO口接收,串口发送,并对部分生成代码讲解

使用设备及工具

软件:

  • CubeMx
  • Keil5
  • 串口收发工具 XCOM
  • 串口驱动 CH340

硬件:

  • 以STM32F103C8T6最小系统板为例
  • ST-Link

中断方式读取GPIO

  1. 在用户文件目录下打开stm32f1xx_it.c,可以看到外部中断线3,也就是GPIO中断处理函数中调用了HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_3);
    /**
      * @brief This function handles EXTI line3 interrupt.
      */
    void EXTI3_IRQHandler(void)
    {
      /* USER CODE BEGIN EXTI3_IRQn 0 */
    
      /* USER CODE END EXTI3_IRQn 0 */
      HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_3);
      /* USER CODE BEGIN EXTI3_IRQn 1 */
    
      /* USER CODE END EXTI3_IRQn 1 */
    }
    
  2. 查看HAL_GPIO_EXTI_IRQHandler函数的实现,发现和正常处理中断逻辑完全一样,先获取中断标志位,如果是自己设定的PIN脚产生中断,清除中断标准并调用HAL_GPIO_EXTI_Callback函数。
/**
  * @brief  This function handles EXTI interrupt request.
  * @param  GPIO_Pin: Specifies the pins connected EXTI line
  * @retval None
  */
void HAL_GPIO_EXTI_IRQHandler(uint16_t GPIO_Pin)
{
  /* EXTI line interrupt detected */
  if (__HAL_GPIO_EXTI_GET_IT(GPIO_Pin) != 0x00u)
  {
    __HAL_GPIO_EXTI_CLEAR_IT(GPIO_Pin);
    HAL_GPIO_EXTI_Callback(GPIO_Pin);
  }
}
  1. 在CubeMx中存在很多xx_Callback函数,让我们将自己想要的功能写在里面,不需要自己去读取清除标志位,可以看到HAL_GPIO_EXTI_Callback给了一个__weak弱定义,留给我们实现这个函数,也避免了用户不去实现导致工程中找不到该函数而报错。
/**
  * @brief  EXTI line detection callbacks.
  * @param  GPIO_Pin: Specifies the pins connected EXTI line
  * @retval None
  */
__weak void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
  /* Prevent unused argument(s) compilation warning */
  UNUSED(GPIO_Pin);
  /* NOTE: This function Should not be modified, when the callback is needed,
           the HAL_GPIO_EXTI_Callback could be implemented in the user file
   */
}
  1. 实现HAL_GPIO_EXTI_Callback函数,检测是否为PIN_3,如果是PIN_3产生的中断,发送数据。
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
	if(GPIO_Pin == GPIO_PIN_3)
	{
		HAL_UART_Transmit(&huart2,"The state of PB3 is RESET!",sizeof("The state of PB3 is RESET!"),1000);
	}
}
  • 11
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值