GD32单片机定时器居然是16位的,不明白。

[复制链接]
5928|21
 楼主| dxfshsh 发表于 2019-5-31 15:51 | 显示全部楼层 |阅读模式
本帖最后由 dxfshsh 于 2019-5-31 15:53 编辑

看了一下手册,发现在GD中的定时器全都是16位的,非常失望,32位单片机做32位定时器很难吗?

评论

407等就有两个32位的通用定时器,,,  发表于 2019-6-1 20:48
梦麟yy 发表于 2019-5-31 17:31 | 显示全部楼层
定时器之间是可以互联的,用2个16位定时器就可以组成一个32位定时器,所以不是很难,是没有必要
lvben5d 发表于 2019-6-1 15:22 | 显示全部楼层
主要实际应用中,几乎没有应用需要啊。
 楼主| dxfshsh 发表于 2019-6-2 23:32 | 显示全部楼层
我是从NXP转过来的,NXP的定时器都是32位的,我的应用也是按32位设计的,16位真的不够用呀,如果将两个16位串接,可不可以构成一个32位定时器呢?
请用过GD32的朋友指点一下,谢谢!  如果串接构成一个32位的定时器,那么问题又来了,我无法用单条指令读取这个32位数,需要用多条指令拼接,这里会有问题的。
zeshoufx 发表于 2019-6-3 08:53 | 显示全部楼层
gd32f407等都有两个32位的
 楼主| dxfshsh 发表于 2019-6-3 19:33 | 显示全部楼层
本帖最后由 dxfshsh 于 2019-6-3 19:35 编辑
zeshoufx 发表于 2019-6-3 08:53
gd32f407等都有两个32位的

是这样的,我们用NXP的lpc1752开发了一款支持TTCANopen的USB转CAN模块,里面用到了32位定时器,由于1752不支持最新的CAN-FD,看到GD32E103单片机上有,就想移植过来,您说的GD32F407好像不支持CAN-FD吧?好像目前只有GD32E103系列支持CAN-FD,而该系列的定时器偏偏又都是16位的!
zeshoufx 发表于 2019-6-3 20:19 | 显示全部楼层
dxfshsh 发表于 2019-6-3 19:33
是这样的,我们用NXP的lpc1752开发了一款支持TTCANopen的USB转CAN模块,里面用到了32位定时器,由于1752不 ...

定时器是干什么的?可不可以把定时器频率设置低一些
qcliu 发表于 2019-6-12 14:43 | 显示全部楼层
16位也不用失望啊
tfqi 发表于 2019-6-12 14:48 | 显示全部楼层
两个定时器串联不就可以了吗
zljiu 发表于 2019-6-12 15:10 | 显示全部楼层
可以串联 就是麻烦点
coshi 发表于 2019-6-12 15:15 | 显示全部楼层
既然决定用了 那就别悲愤了 还是想办法解决问题吧
Sunriver_Yao 发表于 2019-6-16 20:44 | 显示全部楼层
16b预分频,16b计数器,8b后分频,已经38位了,还不够?那就再级联,拼接成32位的。要瞬间读出,也没问题!用一个事件(UG)去抓取两个拼接的32b计数器,保证精确,准确,不失步。
drer 发表于 2019-6-19 11:19 | 显示全部楼层
直接进行级联不就成了吗
 楼主| dxfshsh 发表于 2019-7-17 22:33 | 显示全部楼层
非常感谢大家的积极回复,用两个定时器链接构成一个32位的计数器,貌似可行,但是有一个缺陷,就是我不能使用一条指令将这个32位数读出来,需求使用多条读取指令,这样就存在一个小概率事件,就是当我读完一个16位计数器后,发生了“进位”,这样再读第二个16位计数器,拼接成32位数会出错,当然我们可以使用更多的代码进行进位检测,更正错误。这个真的比直接使用32位计数器来的复杂麻烦的多!!!
 楼主| dxfshsh 发表于 2019-7-17 22:34 | 显示全部楼层
非常感谢大家的积极回复,用两个定时器链接构成一个32位的计数器,貌似可行,但是有一个缺陷,就是我不能使用一条指令将这个32位数读出来,需求使用多条读取指令,这样就存在一个小概率事件,就是当我读完一个16位计数器后,发生了“进位”,这样再读第二个16位计数器,拼接成32位数会出错,当然我们可以使用更多的代码进行进位检测,更正错误。这个真的比直接使用32位计数器来的复杂麻烦的多!!!
lvben5d 发表于 2019-7-18 07:00 | 显示全部楼层
楼主要是有空,讲解下为什么 CAN_FD 需要32位定时器,做CAN波特率自适应辅助?
acguy 发表于 2019-7-18 09:46 | 显示全部楼层
dxfshsh 发表于 2019-7-17 22:34
非常感谢大家的积极回复,用两个定时器链接构成一个32位的计数器,貌似可行,但是有一个缺陷,就是我不能使 ...

uint16_t  high = read_high16();
for (;;) {
    uint16_t low = read_low16();
    uint16_t high_again = read_high16();
    if (high_again == high)
          return (high << 16) + low;
    high = high_again;
}
XIF123 发表于 2019-7-18 10:54 | 显示全部楼层
本公司有大量原装GD32系列芯片 出售有需要可以联系13286363809肖先生
670776685 发表于 2019-7-21 13:01 | 显示全部楼层
都是16位定时器芯片设计者可以复制粘贴,而使用到32位开发者麻烦些了。
 楼主| dxfshsh 发表于 2019-7-27 10:49 | 显示全部楼层
lvben5d 发表于 2019-7-18 07:00
楼主要是有空,讲解下为什么 CAN_FD 需要32位定时器,做CAN波特率自适应辅助? ...

是做系统心跳使用
您需要登录后才可以回帖 登录 | 注册

本版积分规则

39

主题

160

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部