搜索

[PIC®/AVR® MCU] 【CuriosityNano测评报告】02.尝试开启定时器不成功(已经解...

[复制链接]
31082|6
hu9jj|  楼主 | 2021-3-23 14:22 | 显示全部楼层 |阅读模式
本帖最后由 hu9jj 于 2021-3-24 16:11 编辑

    我习惯在项目中开启定时器进行毫秒计时,然后在主循环中根据这个毫秒计时值进行处理,这次测试也不例外。按照以往的经验,使用MCC进行配置是最方便的,不需要去计算参数,只要输入要定时的数值就行。所以我照旧进入MCC配置界面,选择定时器TCB0,设置定时时间为1ms,如下图:
time01.jpg

    定义一个全局变量ms,然后在tcb0.c的中断处理函数ISR()中对这个全局变量进行每毫秒自加:
time03.jpg

    在主函数中启动定时器,并在主循环中对ms变量进行判断和处理:
time05.jpg

    在我以往的测试过程中通过这几步操作就行的,可是这次却毫无反映,似乎定时器没有被启动,测试了几天都没能成功,包括添加了函数TCB0_SetCaptIsrCallback(NULL)也不行。检查了tcb0.h中声明的函数,也看不出有其他需要使用的:
time04.jpg

    在MCC配置中添加了启用溢出中断也不行:
time02.jpg

    英文版的数据手册我也看不懂,本想借助翻译来查看,但该手册又关掉了复制功能,无法直接拷贝粘贴到翻译软件中去。现将项目打包如下,哪位大佬有空帮我看看是什么原因,谢谢了!
Mytest1.X.rar (155.4 KB, 下载次数: 1)

使用特权

评论回复
lcczg| | 2021-3-24 15:36 | 显示全部楼层
ms这种在中断中使用的变量一定要定义为volatile。另外要定义为8位的变量。
//unsigned int ms;
volatile uint8_t ms;

//extern unsigned int ms;
extern volatile uint8_t ms;

使用特权

评论回复
hu9jj|  楼主 | 2021-3-24 16:10 | 显示全部楼层
lcczg 发表于 2021-3-24 15:36
ms这种在中断中使用的变量一定要定义为volatile。另外要定义为8位的变量。
//unsigned int ms;
volatile ui ...

谢谢指教!添加了 volatile 前缀就OK了。数据类型定义为int是毫秒计数值会大于255。

使用特权

评论回复
幸福小强| | 2021-3-24 21:54 | 显示全部楼层
感谢分享了。

使用特权

评论回复
lcczg| | 2021-3-25 09:04 | 显示全部楼层
hu9jj 发表于 2021-3-24 16:10
谢谢指教!添加了 volatile 前缀就OK了。数据类型定义为int是毫秒计数值会大于255。 ...

此种情况下用int 类型非常不安全,因为中断内部和外部同时有操作。比如外面操作了低字节,而中断操作了整个int, 然后出中断又操作高字节,就可能乱掉。所以要用8位类型变量。

使用特权

评论回复
hu9jj|  楼主 | 2021-3-25 12:59 | 显示全部楼层
lcczg 发表于 2021-3-25 09:04
此种情况下用int 类型非常不安全,因为中断内部和外部同时有操作。比如外面操作了低字节,而中断操作了整 ...

    谢谢指教!怪不得我设定500毫秒转换一次LED的状态,也就是每秒闪烁一次,但在实际运行时有时会不足一秒便闪烁一次,即闪烁的频率不稳定,应该是这个原因造成的。增加了一个变量来接替计数后,现在LED闪烁的频率就稳定了。

使用特权

评论回复
TT1000| | 2021-5-13 10:00 | 显示全部楼层
学习了

使用特权

评论回复
扫描二维码,随时随地手机跟帖
您需要登录后才可以回帖 登录 | 注册

本版积分规则

我要发帖 我要提问 投诉建议 申请版主

快速回复

您需要登录后才可以回帖
登录 | 注册
高级模式

本版热帖

本版活跃用户

优质原创写原创,赢大奖

编辑推荐

  • 1 wolfe_yu 得到打赏 ¥180.00
  • 2 最美葫芦娃 得到打赏 ¥155.00
  • 3 hk386 得到打赏 ¥75.00
  • 4 火星国务卿 得到打赏 ¥63.00
  • 5 两只袜子 得到打赏 ¥56.00
  • 6 laocuo1142 得到打赏 ¥50.00
  • 7 linghz 得到打赏 ¥45.00
  • 8 gaon2 得到打赏 ¥45.00
  • 9 ezcui 得到打赏 ¥45.00
  • 10 jlc317 得到打赏 ¥40.00
在线客服 快速回复 返回顶部 返回列表