STM32
直播中

深圳市正商电子科有限公司

7年用户 463经验值
私信 关注
[问答]

怎样使用STM32 CubeIDE软件工具完成控制板上的LED灯亮灭操作呢

怎样使用STM32 CubeIDE软件工具完成控制板上的LED灯亮灭操作呢?有哪些实验步骤呢?

回帖(1)

孙宇

2021-11-16 10:55:36
  一、Cortex-M4外部中断
  实验目的
  基于STM32MP57A,使用STM32 CubeIDE软件工具完成开发板上K2按键外部中断的方式控制版上LED灯亮灭操作
  二、实验步骤
  1.实验原理
  按键K2
  
  LED灯
  
  LED灯的GPIO接口
  
  2.实验步骤
  外部中断配置步骤:
  设置PA0为外部中断模式,PZ6为GPIO输出模式
  IDE会生成GPIO的Init初始化程序以及HAL库
  在GPIO-PA0管脚初始化后,增加中断优先级设置HAL_NVIC_SetPriority(IRQn_Type IRQn, uint32_t PreemptPriority, uint32_t SubPriority)和中断使能HAL_NVIC_EnableIRQ(IRQn_Type IRQn)
  EXTI0_IRQHandler(启动文件startup_stm32mp15xx.s)中设置中断处理的管脚HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_0)
  main函数中需要定义中断处理的回调函数void HAL_GPIO_EXTI_Falling_Callback(uint16_t GPIO_Pin)判断管脚PA0的状态来做LED的状态变化操作,这个函数是在按键中断触发后调用HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_0)中调用回调函数实现LED控制。
  部分代码如下:
  1. 中断触发后入口函数
  void EXTI0_IRQHandler(void)
  {
  HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_0); //在这里添加中断的处理函数
  }
  2. HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_0)调用HAL_GPIO_EXTI_Falling_Callback(GPIO_Pin)
  void HAL_GPIO_EXTI_IRQHandler(uint16_t GPIO_Pin)//IDE提供的库函数
  {
  /* EXTI line interrupt detected */
  if (__HAL_GPIO_EXTI_GET_RISING_IT(GPIO_Pin) != RESET)
  {
  __HAL_GPIO_EXTI_CLEAR_RISING_IT(GPIO_Pin);
  HAL_GPIO_EXTI_Rising_Callback(GPIO_Pin);
  }
  if (__HAL_GPIO_EXTI_GET_FALLING_IT(GPIO_Pin) != RESET)
  {
  __HAL_GPIO_EXTI_CLEAR_FALLING_IT(GPIO_Pin);
  HAL_GPIO_EXTI_Falling_Callback(GPIO_Pin);
  }
  }
  3. main中的触发方式回调函数
  void HAL_GPIO_EXTI_Falling_Callback(uint16_t GPIO_Pin)
  {
  if(GPIO_Pin == GPIO_PIN_0)
  {
  delay_my(100);/* delay to anti-shake */
  if(HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_0) == GPIO_PIN_RESET)/* read PA0 state */
  {
  HAL_GPIO_TogglePin(GPIOZ,GPIO_PIN_6);
  }
  }
  }
  //延时函数
  void delay_my(uint8_t time)
  { int i, j;
  for(i=0; i《time*10; i++)
  {
  for(j=0; j《time; j++)
  {}
  }
  }
  总结
  还有很多没弄清楚的地方,比如为什么在PA0初始化代码后添加中断优先级设置和中断使能,因为在芯片手册上没有找到外部中断的寄存器设置流程图,也可能是自己还不太会看芯片手册,先接着后面的实验做,后面再回过头来仔细研究。
举报

更多回帖

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