[活动专区] 【AT-START-F405测评】3.按键中断检测与PWM输出

[复制链接]
 楼主| 发表于 2024-4-26 21:49 | 显示全部楼层 |阅读模式
1.按键中断检测

打开AT32 Work Bench,将PA0功能选择为EXINT
微信截图_20240426205745.png
查看原理图,按键是下拉的
微信截图_20240426205850.png
配置成上升沿中断
微信截图_20240426205939.png
开启中断
微信截图_20240426205947.png
生成代码,在中断函数中加入处理代码
  1. void EXINT0_IRQHandler(void)
  2. {
  3.   /* add user code begin EXINT0_IRQ 0 */
  4.     if(exint_flag_get(EXINT_LINE_0) != RESET)
  5.     {

  6.         userkey_int();
  7.         exint_flag_clear(EXINT_LINE_0);

  8.     }
  9.   /* add user code end EXINT0_IRQ 0 */
  10.   /* add user code begin EXINT0_IRQ 1 */

  11.   /* add user code end EXINT0_IRQ 1 */
  12. }
按键需要进行去抖处理
  1. uint8_t key_down_flag = 0;
  2. void userkey_int(void)
  3. {
  4.     key_down_flag = 20;
  5. }
  6. void AppMsTick(void)
  7. {
  8.     if(key_down_flag > 0)
  9.     {
  10.         key_down_flag -= 1;
  11.         if(key_down_flag == 0 && gpio_input_data_bit_read(GPIOA,GPIO_PINS_0))
  12.         {
  13.             gpio_bits_toggle(LED2_GPIO_PORT,LED2_PIN);
  14.             gpio_bits_toggle(LED3_GPIO_PORT,LED3_PIN);
  15.             gpio_bits_toggle(LED4_GPIO_PORT,LED4_PIN);
  16.         }
  17.     }
  18. }
运行效果
WeChat_20240426214335 00_00_00-00_00_30.gif
2.PWM输出
开启定时器2的通道1、2、3,配置定时器频率为1000Hz

微信截图_20240426204512.png
自动分配的IO
微信截图_20240426204521.png
要外接的是这个LED模块
微信截图_20240426205352.png
模块是共阳极的,这里将PWM极性设置为低
微信截图_20240426204531.png
实现颜色渐变效果代码

  1. uint8_t ledstep = 0;
  2. uint16_t pwm = 0;
  3. void LedChangeColor(void)
  4. {
  5.     uint8_t ch1 = TMR_SELECT_CHANNEL_1;
  6.     uint8_t ch2 = TMR_SELECT_CHANNEL_2;
  7.     if(ledstep >1)
  8.     {
  9.         ch1 = TMR_SELECT_CHANNEL_3;
  10.         ch2 = TMR_SELECT_CHANNEL_1;
  11.     }
  12.     else if(ledstep >0)
  13.     {
  14.         ch1 = TMR_SELECT_CHANNEL_2;
  15.         ch2 = TMR_SELECT_CHANNEL_3;
  16.     }
  17.     tmr_channel_value_set(TMR2,ch1,1000 - pwm);
  18.     tmr_channel_value_set(TMR2,ch2,pwm);
  19.     pwm += 1;
  20.     if(pwm > 1000)
  21.     {
  22.         ledstep += 1;
  23.         pwm = 0;
  24.     }
  25.     if(ledstep == 3)
  26.         ledstep = 0;
  27. }
  28. void AppMsTick(void)
  29. {
  30.     LedChangeColor();
  31. }
运行效果
WeChat_20240426205337 00_00_00-00_00_30.gif

您需要登录后才可以回帖 登录 | 注册

本版积分规则

认证:同飞软件研发工程师
简介:制冷系统单片机软件开发,使用PID控制温度

161

主题

814

帖子

10

粉丝
快速回复 返回顶部 返回列表