打印
[单片机芯片]

关于CH579的定时器TMR0的设置问题

[复制链接]
1032|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 iotd117 于 2020-9-8 11:54 编辑

电话跟销售申请后,很快就拿到CH579M-R1-1v2开发板了,测试TMR0时发现能设置的最小定时时间只能到2ms,例程中TMR0的初始化是
TMR0_TimerInit( FREQ_SYS / 10 );                  // 设置定时时间 100ms
我将10改到500后得到的定时时间是2ms,再改大之后就没效果了,不知道大家有没有碰到这个问题,或者是请沁恒的工程师帮忙解答一下是否就是只能到2ms?
另外,期待更多关于ble_mesh相关的资料和说明

使用特权

评论回复
沙发
WCHTech2| | 2020-9-8 17:49 | 只看该作者
32M主频下,理论最低延时为31.25ns,用逻辑分析仪测试定时器中断反转IO,最低1.17us。例程中是在中断服务程序中反转IO,将IO引脚与LED相连,通过观察LED的闪烁频率确定延时的长短效果,到达一定频率后肉眼无法看出LED的闪烁。

使用特权

评论回复
板凳
自己造声卡| | 2020-9-8 18:29 | 只看该作者
感谢楼主的分享,一直认为这样的**是我最需要的**。

使用特权

评论回复
地板
看别人照片| | 2020-9-8 18:31 | 只看该作者
一直认为这样的**是我最需要的**。

使用特权

评论回复
5
0改到500后得到的定时时间是2ms,再改大之后就没效果了,不知道大家有没有碰到这个问题,或者是请沁恒的工程师帮忙解答一下是否就是只能到2ms?

使用特权

评论回复
6
自己的灌饼| | 2020-9-8 19:25 | 只看该作者
pinTopin替换STM32F103时,如果碰到一些问题可以参考我们的应用笔记。

使用特权

评论回复
7
kingsleych| | 2020-9-8 22:29 | 只看该作者
很多灌水的呀,无意义的回帖,不知道在干嘛,这种问题,
这个定时器一看就是设置计数溢出值,然后产生中断,,设置成500产生2ms中断,更大就不产生了?逻辑分析仪抓下呀,怎么可能,别说大于500,就是5000 50000也正常,

使用特权

评论回复
8
总结的不错,学习了。很棒的。

使用特权

评论回复
9
iotd117|  楼主 | 2020-9-10 09:32 | 只看该作者
kingsleych 发表于 2020-9-8 22:29
很多灌水的呀,无意义的回帖,不知道在干嘛,这种问题,
这个定时器一看就是设置计数溢出值,然后产生中断,,设置 ...

多谢你的答复!
我也知道是设置寄存器R32_TMR0_CNT_END的值,主频32M/500=64000,等时间到了64000*31.25ns=2ms,我是通过在中断响应函数里反转PB16,没有逻辑分析仪,是用的示波器来查看
void TMR0_IRQHandler( void )
{
    if( TMR0_GetITFlag( TMR0_3_IT_CYC_END ) )
    {
        TMR0_ClearITFlag( TMR0_3_IT_CYC_END );
        GPIOB_InverseBits( GPIO_Pin_16 );
    }
}这三张波形图分别是设置FREQ_SYS / 500,/1000,/2000时的波形图。翻看手册也没有找到原因,所以才在这里请教。

2000.jpg (292.44 KB )

2000.jpg

1000.jpg (302.97 KB )

1000.jpg

500.jpg (293.13 KB )

500.jpg

使用特权

评论回复
10
WCHTech2| | 2020-9-10 09:53 | 只看该作者
iotd117 发表于 2020-9-10 09:32
多谢你的答复!
我也知道是设置寄存器R32_TMR0_CNT_END的值,主频32M/500=64000,等时间到了64000*31.25n ...

方便的话把工程发出来,我们这测试下,我这用的是官网最新的EVT 2.0测试的,TMR0可以正常设置不同的定时时间。官网例程下载:http://www.wch.cn/downloads/CH579EVT_ZIP.html

使用特权

评论回复
11
iotd117|  楼主 | 2020-9-10 14:06 | 只看该作者
WCHTech2 发表于 2020-9-10 09:53
方便的话把工程发出来,我们这测试下,我这用的是官网最新的EVT 2.0测试的,TMR0可以正常设置不同的定时 ...

问题已经找到,TMR0是没有问题的,问题出在我自己的中断响应函数。
本来是想产生spwm波形的,于是在TMR0_IRQHandler( void ) 里写了
PWM4_ActDataWidth( sin(2 * PI * TmrCounts / Sin_Cycle_Counts) * PWMX_Cycle / 2 + PWMX_Cycle / 2 );
这样的乘除运算太耗时间了,所以导致定时不对。
多谢解答!

使用特权

评论回复
12
单片小菜| | 2020-9-14 18:12 | 只看该作者
学习了,不错,学习了很多,很深入的,感谢楼主的分享。

使用特权

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

本版积分规则

1

主题

5

帖子

0

粉丝