打印
[C语言]

瑞萨单片机 timer不准

[复制链接]
2071|14
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
lxtiger|  楼主 | 2018-3-22 17:42 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 lxtiger 于 2018-3-22 17:44 编辑

使用瑞萨单片机R7F0C014B,开启定时器功能,定时器为1ms,控制1s周期开断,但是定时器不准,每隔4个周期会有个脉冲输出,不知道哪里出的问题?
main.c
#include "r_cg_macrodriver.h"
#include "r_cg_cgc.h"
#include "r_cg_port.h"
#include "r_cg_timer.h"
#include "r_cg_wdt.h"
#include "r_cg_userdefine.h"

void R_MAIN_UserInit(void);
uint16_t m=0;

void main(void)
{
    R_MAIN_UserInit();
    while (1U)
    {
     if(m==500)
                {
                m = 0;
                P1.7 = ~P1.7;
                }   
    }
}


timer中断
__interrupt static void r_tau0_channel1_interrupt(void)
{
        m++;
}

scope_1.png (292.31 KB )

scope_1.png

相关帖子

沙发
xyz549040622| | 2018-3-22 19:00 | 只看该作者
奇怪怎么会突变呢?严谨的写法,io的翻转都放到中断中,应该就不会了。因为你中断和主函数都会改变m的值。

使用特权

评论回复
板凳
Lbsonggz| | 2018-3-22 21:33 | 只看该作者
m 定义前加volatile ,while (1)中除翻转语句外基本上挪入定时中断中,到500后丢个标志位出来,主程序判断执行。while 和定时中断抢时间片呢,

使用特权

评论回复
地板
ayb_ice| | 2018-3-23 08:37 | 只看该作者
一看这代码就明白了,还是多怀疑自己吧

使用特权

评论回复
5
ayb_ice| | 2018-3-23 08:57 | 只看该作者
ayb_ice 发表于 2018-3-23 08:37
一看这代码就明白了,还是多怀疑自己吧

char bFlag = 0;

void main(void)
{
        R_MAIN_UserInit();
        while (1U)
        {
                if(bFlag)
                {                        bFlag = 0;
                        P1.7 = ~P1.7;
                }   
        }
}


timer中断
__interrupt static void r_tau0_channel1_interrupt(void)
{
        if (++m >= 500)
                {
                        m = 0;
                        bFlag = 1;
                }
}

使用特权

评论回复
6
lxtiger|  楼主 | 2018-3-23 09:00 | 只看该作者
xyz549040622 发表于 2018-3-22 19:00
奇怪怎么会突变呢?严谨的写法,io的翻转都放到中断中,应该就不会了。因为你中断和主函数都会改变m的值。 ...

void main(void)
{
    DI();
        R_Systeminit();
        EI();
    while (1U)
    {
     
    }
}

__interrupt static void r_tau0_channel0_interrupt(void)
{
        m++;
        if(m==500)
                {
                m = 0;
                P1.7 = ~P1.7;
                }   
}

使用特权

评论回复
7
lxtiger|  楼主 | 2018-3-23 09:05 | 只看该作者
ayb_ice 发表于 2018-3-23 08:57
char bFlag = 0;

void main(void)

按照你的方法修改程序还是会有间断。

使用特权

评论回复
8
ayb_ice| | 2018-3-23 09:09 | 只看该作者
lxtiger 发表于 2018-3-23 09:05
按照你的方法修改程序还是会有间断。

试试
P1.7 = !P1.7;

实际代码还有其它程序吗

使用特权

评论回复
9
lxtiger|  楼主 | 2018-3-23 09:15 | 只看该作者
ayb_ice 发表于 2018-3-23 09:09
试试
P1.7 = !P1.7;

我自己先看看定时器的配置吧,谢谢~

使用特权

评论回复
10
m564522634| | 2018-3-23 10:02 | 只看该作者
xyz549040622 发表于 2018-3-22 19:00
奇怪怎么会突变呢?严谨的写法,io的翻转都放到中断中,应该就不会了。因为你中断和主函数都会改变m的值。 ...

应该不是那个问题,我感觉 是有什么周期性的干扰传过来了

使用特权

评论回复
11
m564522634| | 2018-3-23 10:03 | 只看该作者
你试着在硬件中断里翻转IO口感觉 是其他的问题造成的

使用特权

评论回复
12
小鱼儿1045| | 2018-3-23 13:40 | 只看该作者
你的是用CS+ 自动生成的程序吧,多看看你的r_cg_timer.h,我怀疑是你的定时器初始化配置有问题,瑞萨的单片机经常用,感觉挺好用的

使用特权

评论回复
13
ashley0077| | 2018-4-4 16:42 | 只看该作者
断开仿真器,直接运行板子试试

使用特权

评论回复
14
zqx1000| | 2018-4-10 07:10 | 只看该作者
断开仿真器,直接运行板子试试

使用特权

评论回复
15
sum123456| | 2018-4-11 13:49 | 只看该作者

实际代码还有其它程序吗

使用特权

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

本版积分规则

个人签名:懂得选择;学会放弃;耐得住寂寞;经得起诱惑 邮箱:lxtiger@163.com QQ :858322522

14

主题

255

帖子

2

粉丝