STM32
直播中

其实znvm

8年用户 1215经验值
擅长:电源/新能源
私信 关注
[问答]

如何使用Clion和CubeMx去控制led灯的亮灭呢

如何使用Clion和CubeMx去控制led灯的亮灭呢?有哪些操作步骤?

回帖(1)

陈秀珍

2021-11-16 10:22:38
  依旧是使用Clion和CubeMx开发
  实现功能
  以中断的方式,通过按键控制 led灯的亮灭
  按一下,灯亮。再按一下,灯灭。
  一 新建工程
  查看原理图
  按键 PA15LED灯 PA8 打开CubeMx,先使能串口线,让我们可以通过仿真器往单片机里下载程序。
  
  找到PA15,选择为GPIO_EXTI15 中断模式
  
  GPIO mode设置为 上升沿中断
  
  我们的GPIO默认是3.3V高电平,当按下按键,GPIO变为低电平,此过程是下降沿。松开按键,GPIO又变为高电平,此过程为上升沿。我是设置的是上升沿中断,也就是松开按键的时候,灯会变化。
  
  PA8 LED引脚配置,默认设为高电平,处于熄灭状态
  
  
  开启中断,将优先级降低一点,设为1。数字越小优先级越高。
  上面的都是一些系统的中断,为了不影响系统的运行,我们要将外设的中断优先级设置的低一些。
  
  时钟的话,36M就够用了。
  
  然后生成工程
  代码编写
  在gpio.c文件中可以找到,中断服务函数
  void HAL_GPIO_EXTI_IRQHandler(uint16_t GPIO_Pin) 当捕获到上升沿,触发中断,就会进入到这个函数里面,
  
  然后就会执行HAL_GPIO_EXTI_Callback(GPIO_Pin);函数
  此函数为回调函数,我们进去看看。
  前面的 __weak 表示此函数为虚函数,需要用户重写的。
  那就重写呗
  __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
  */
  }
  在主函数的上面随便找个空地
  
  输入如下代码
  void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
  {
  /* Prevent unused argument(s) compilation warning */
  HAL_GPIO_TogglePin(GPIOA,GPIO_PIN_8); //翻转电平
  /* NOTE: This function Should not be modified, when the callback is needed,
  the HAL_GPIO_EXTI_Callback could be implemented in the user file
  */
  }
  就像下面这样
  松开按键,进入回调函数,LED电平翻转一次。这样就实现了按键控制LED灯的亮灭。
  
举报

更多回帖

发帖
×
20
完善资料,
赚取积分