回答

收藏

[评测分享] 【RISC-V 沁恒微-CH585M-R1开发板试用体验】4. 基本定时器

#板卡评测 #板卡评测 730 人阅读 | 0 人回复 | 2025-06-21

本帖最后由 stm1024 于 2025-6-21 16:54 编辑

好了,又到了周末,有时间将CH585开发板的计时器做个简单评测。


废话少说,直接进入正题。先看datasheet,关于定时器方面的信息如下:


所以关于计时器/计数器或者PWM都是支持的,这次我先测试简单的定时器。通常,定时器使用中断方式控制,对于一个经典的前后台程序,定时器中断中一般只做简单的操作,或者只是设置状态位等,然后在主程序main中根据状态位决定对应的响应。不过作为演示程序,这里就做一个简单的翻转GPIO即可。
定时器的配置很简单,和串口配置类似,只需要几行代码就可以搞定:

这三行代码,第一行配置了定时器的周期,我们将系统频率作为参数,则定时周期就是1秒,如果我们想定时为100ms,就使用FREQ_SYS/10。第二行则是中断配置,第三行是使能中断。

说到了中断,自然要有对应的中断处理函数,在中断处理函数中,一般是触发一个标志位,然后清除中断标志:



上述代码中,没有使用什么标志位,而是直接使用的翻转GPIO口PA0和PA4,两个分别用作LED0的控制和提供给逻辑分析仪抓数据。

完整代码如下:


编译下载以后,可以看到LED灯亮1秒灭1秒,逻辑分析仪数据如下:


如果我们把定时器周期配置为FREQ_SYS/10,逻辑分析仪抓取数据:


可以看到基本上是100ms的频率在翻转,看上去都很不错。

那么,如果我们要定时2秒,直接将定时器周期配置为FREQ_SYS*2可以吗?抓个数据看看:


what!?不对劲!怎么定时器时间拉长了,周期反而缩短了?看源代码:


可见最大的值不能超过67108864,因此,FREQ_SYS=62400000,乘以2必然超过了这个上限。这种情况下必须引入一个额外的变量辅助定时。

修改如下:


再抓取数据,如下:


这回就对了。


OK,今日测评就是这样。



分享到:
回复

使用道具 举报

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

本版积分规则

5300 积分
55 主题
+ 关注
热门推荐
关闭

站长推荐上一条 /3 下一条