打印
[AT32 WorkBench]

AT32 WorkBench常用功能5--定时器溢出中断配置

[复制链接]
141|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 muyichuan2012 于 2024-5-11 17:36 编辑

AT32 WorkBench常用功能5--定时器溢出中断配置

定时器溢出中断
本文主要介绍如何基于AT32 WorkBench配置定时器溢出中断
硬件环境
l  AT-START-F423
l  逻辑分析仪

软件环境
l  AT32 Workbench
l  MDK5
l  DSView


配置步骤
1 打开AT32 WorkBench新建AT32F423工程

2 配置系统时钟(如果使用默认内部HICK倍频到150MHz,客户跳过此步骤2

2.1 打开外设CRM配置HEXT为时钟振荡器,如下图

2.2 打开时钟配置

3 配置定时器周期为1k Hz

4 开启定时器溢出中断,在WorkBench上勾选TMR2_GLOBAL_IRQ如下图

5 配置PA1为push output,用于观察定时器溢出

6 点击“生成代码”生成MDK5代码工程

7 配置定时器溢出中断相关应用代码
7.1 开启定时器溢出中断

at32f423_wk_config.c的wk_tmr2_init函数中键入如下加粗字体部分
  
void wk_tmr2_init(void)
  
{
  
...
  …
  
  tmr_primary_mode_select(TMR2,  TMR_PRIMARY_SEL_RESET);
  
  
   tmr_counter_enable(TMR2, TRUE);
  
  
   /**
  
    * Users need to configure TMR2 interrupt functions according to the  actual application.
  
    * 1. Call the below function to enable the corresponding TMR2  interrupt.
  
    *      --tmr_interrupt_enable(...)
  
    * 2. Add the user's interrupt handler code into the below function in  the at32f423_int.c file.
  
    *     --void  TMR2_GLOBAL_IRQHandler(void)
  
    */
  
  
   /* add user code begin tmr2_init 2 */
  
       tmr_interrupt_enable(TMR2,TMR_OVF_INT,TRUE);
  
   /* add user code end tmr2_init 2 */
  
}
  

7.2 在定时器溢出中断中添加GPIO toggle代码

在at32f423_int.c文件中完成void TMR2_GLOBAL_IRQHandler(void)函数如下
  
void TMR2_GLOBAL_IRQHandler(void)
  
{
  
   /* add user code begin TMR2_GLOBAL_IRQ 0 */
  
   if(tmr_flag_get(TMR2,TMR_OVF_FLAG) == SET)
  
        {
  
               gpio_bits_toggle(GPIOA,GPIO_PINS_1);
  
               tmr_flag_clear(TMR2,TMR_OVF_FLAG);  
  
        }
  
   /* add user code end TMR2_GLOBAL_IRQ 0 */
  
   /* add user code begin TMR2_GLOBAL_IRQ 1 */
  
  
   /* add user code end TMR2_GLOBAL_IRQ 1 */
  
}
  

8 在MDK5上编译,并下载代码到AT32F423 MCU 上
9 复位运行AT32F423 MCU,用逻辑分析仪观察PA1上翻转频率,波形如下图
注意:因为是每1 ms PA1翻转一次,所以下降沿到下降沿的周期就应该为2ms,如下图











使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

161

主题

1768

帖子

24

粉丝