打印
[技术问答]

HC32F003基本定时器中断

[复制链接]
4166|54
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
刚接触到华大的芯片,小新一枚,请大家多多关照
使用HC32F003的基本定时器,去官网上也下载了例程,下载到自己的板子上发现无法进入中断,网上搜没有帖子作参考,自己琢磨了一天也没用,还请大家帮我看看
void Tim2_IRQHandler(void)
{
        Gpio_WriteOutputIO(LEDRed_GPIO,TRUE);
    if (TRUE == Bt_GetIntFlag(TIM2))
    {
        Bt_ClearIntFlag(TIM2);
        timer.time1++;
        if(timer.time1>30000)
        timer.time1=0;
    }
}
void BaseTime_Init(void)
{
    stc_bt_cfg_t   stcCfg;
    uint16_t       u16ArrData = 0xf000;
    uint16_t       u16InitCntData = 0xC000;
    DDL_ZERO_STRUCT(stcCfg);
    Sysctrl_SetPeripheralGate(SysctrlPeripheralBt, TRUE);//打开BT外设时钟
    stcCfg.enGateP = BtPositive;                        //门控极性控制
    stcCfg.enGate  = BtGateDisable;                //门控使能
    stcCfg.enPRS   = BtPCLKDiv8;                        //预除频配置
    stcCfg.enTog   = BtTogDisable;                //反转输出使能
    stcCfg.enCT    = BtTimer;                                        //定时/计数功能选择
    stcCfg.enMD    = BtMode2;                                        //计数模式配置
    Bt_Init(TIM2, &stcCfg);//Bt初始化
        //设置重载值和计数值,启动计数
    Bt_ARRSet(TIM2, u16ArrData);
    Bt_Cnt16Set(TIM2, u16InitCntData);
    Bt_Run(TIM2);
    //TIM2中断使能
    Bt_ClearIntFlag(TIM2);
    Bt_EnableIrq(TIM2);
    EnableNvic(TIM2_IRQn, IrqLevel2, TRUE);
}

就这些代码,没其他的了

528696031d1a0ea389.png (69.92 KB )

528696031d1a0ea389.png

使用特权

评论回复
沙发
martinhu| | 2021-2-22 17:59 | 只看该作者
这个配置应该没什么问题,不过一般是先使能中断,再启动timer

使用特权

评论回复
板凳
余三水| | 2021-2-22 19:08 | 只看该作者
感觉是其他问题导致的,代码没有看出什么问题。参考官方的例程看一看。

使用特权

评论回复
地板
yiyigirl2014| | 2021-2-22 21:58 | 只看该作者
是不是有什么特殊的设置,或者硬件问题

使用特权

评论回复
5
xinpian101| | 2021-2-22 23:23 | 只看该作者
定时器中断是一个比较基本的应用。

使用特权

评论回复
6
xinpian101| | 2021-2-22 23:26 | 只看该作者
还有IO中断。也相当基础。

使用特权

评论回复
7
清醉风尘|  楼主 | 2021-2-23 11:44 | 只看该作者
martinhu 发表于 2021-2-22 17:59
这个配置应该没什么问题,不过一般是先使能中断,再启动timer

我试了一下,还是不行,中断进不去

使用特权

评论回复
评论
叶樱枫 2021-3-26 08:37 回复TA
我之前也是,用官方的库函数设定定时器错误。后来用KEIL看定时器的寄存器发现写入寄存器的数据是错误的。我觉得可能是位操作的问题。然后我直接写32位的寄存器,定时器就正常了。 
8
清醉风尘|  楼主 | 2021-2-23 11:45 | 只看该作者
余三水 发表于 2021-2-22 19:08
感觉是其他问题导致的,代码没有看出什么问题。参考官方的例程看一看。

这个代码就是官方代码拷贝下来的,我也把官方的代码原封不动的编译下到芯片中去,结果一样没进入中断

使用特权

评论回复
9
清醉风尘|  楼主 | 2021-2-23 11:47 | 只看该作者
yiyigirl2014 发表于 2021-2-22 21:58
是不是有什么特殊的设置,或者硬件问题

我也不知道有啥特殊设置,文档上说的很简单,网上搜也搜不到,外围啥电路都没有,就一个单片机,我都换了好几个芯片了,结果一样,就是进不了中断

使用特权

评论回复
10
清醉风尘|  楼主 | 2021-2-23 17:16 | 只看该作者
martinhu 发表于 2021-2-22 17:59
这个配置应该没什么问题,不过一般是先使能中断,再启动timer

我将定时器的计数寄存器的值输出一下看看,结果发现值为初始值,定时器就没有成功运行过

使用特权

评论回复
11
martinhu| | 2021-2-24 20:10 | 只看该作者
清醉风尘 发表于 2021-2-23 17:16
我将定时器的计数寄存器的值输出一下看看,结果发现值为初始值,定时器就没有成功运行过 ...

如果程序没问题,是不是板子有问题??

使用特权

评论回复
12
豌豆爹| | 2021-2-25 10:51 | 只看该作者
建议对比一下官方例程

使用特权

评论回复
13
凡人8000| | 2021-2-25 17:36 | 只看该作者
最好把整个工程打包发出来看看

使用特权

评论回复
14
kinto| | 2021-2-26 12:54 | 只看该作者
楼主后来是怎么解决的

使用特权

评论回复
15
清醉风尘|  楼主 | 2021-2-26 14:14 | 只看该作者
豌豆爹 发表于 2021-2-25 10:51
建议对比一下官方例程

就是官方原版程序,除了编译一下就下载到芯片里,其他都没动,仿真显示卡在检测中断的死循环里了,定时器里的寄存器数值就没任何变化,定时器根本就没启动,PWM也是如此,根本无法产生。

使用特权

评论回复
16
清醉风尘|  楼主 | 2021-2-26 14:17 | 只看该作者
martinhu 发表于 2021-2-24 20:10
如果程序没问题,是不是板子有问题??

我板子上其他功能都可以,唯独定时器无法启动中断,与定时器相关的PWM也无法运行。串口通讯的波特率产生就是用的定时器,这个是可以,不知道为啥

使用特权

评论回复
17
清醉风尘|  楼主 | 2021-2-26 14:18 | 只看该作者
kinto 发表于 2021-2-26 12:54
楼主后来是怎么解决的

使用滴答定时器,基本定时器和高级定时器基本报废,PWM也无法产生,也只能用IO口模拟了

使用特权

评论回复
18
martinhu| | 2021-3-1 10:05 | 只看该作者
清醉风尘 发表于 2021-2-26 14:18
使用滴答定时器,基本定时器和高级定时器基本报废,PWM也无法产生,也只能用IO口模拟了 ...

这个问题后来代理没有和你沟通吗?你好像使用的是自建的KEIL工程???但是工程配置里面缺少一个设置,所以中断都进不了……
建议楼主在不熟悉工程配置的时候,使用驱动库样例


使用特权

评论回复
19
gdiypu431862| | 2021-3-1 14:23 | 只看该作者
GFDSGDSFGFDSGDFSGFDG

使用特权

评论回复
20
gdiypu431862| | 2021-3-1 14:23 | 只看该作者
HDFSHGDFSGDSGDSGSDFG

使用特权

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

本版积分规则

1

主题

8

帖子

0

粉丝