OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2688|回复: 10

滴答定时器

[复制链接]

1

主题

6

帖子

0

精华

新手入门

积分
10
金钱
10
注册时间
2018-5-30
在线时间
4 小时
发表于 2018-5-30 20:46:08 | 显示全部楼层 |阅读模式
15金钱
本帖最后由 hfbai 于 2018-5-30 20:59 编辑

遇到瓶颈了。
我循环使用滴答定时器延时函数delay_us(),输出高电平,延迟一会,再输出低电平,延迟一会。结果是有的时间是延迟的对,有的却总是延迟15ms。
图中15ms的都是错的
毕设很关键啊,大哥们,解决了,可以发红包啊

1527684316718.jpg

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

1

主题

6

帖子

0

精华

新手入门

积分
10
金钱
10
注册时间
2018-5-30
在线时间
4 小时
 楼主| 发表于 2018-5-30 20:50:53 | 显示全部楼层
u32 sendCode[200] = {9000,4500,
                                        560,560,560,560,560,560,560,560,560,560,560,560, 560,1680,560,560,
                                         560,1680,560,1680,560,1680,560,1680,560,1680,560,1680,560,560,560,1680,
                                         560,1680,560,1680,560,560,560,1680,560,1680,560,560,560,560,560,560,
                                         560,560,560,560,560,1680,560,560,560,560,560,1680,560,1680,560,1680,
                                         480,38924,9033,2291,510};
void IR_SendData(u32 SendAddr)
{
        u16 i;
        for(i=0; i<200&&sendCode[i]!=0; i++){
                if(i%2 == 0){
                        IR_SEND = 0;
      delay_us(sendCode[i]);
                        IR_SEND = 1;
                }else{
                        IR_SEND = 1;
                delay_us(sendCode[i]);
               
                }       
        }
回复

使用道具 举报

1

主题

6

帖子

0

精华

新手入门

积分
10
金钱
10
注册时间
2018-5-30
在线时间
4 小时
 楼主| 发表于 2018-5-30 20:51:11 | 显示全部楼层
static u8  fac_us=0;//us&#209;óê±±&#182;3&#203;êy
static u16 fac_ms=0;//ms&#209;óê±±&#182;3&#203;êy
void DelayInit()         
{
        SysTick->CTRL&=0xFFFFFFFB;
        fac_us=SystemCoreClock/8000000;        //&#206;a&#207;μí3ê±&#214;óμ&#196;1/8  
        fac_ms=(u16)fac_us*1000;//·&#199;ucos&#207;&#194;,′ú±í&#195;&#191;&#184;&#246;msDèòaμ&#196;systickê±&#214;óêy   

}                                                                                                                                                          
void delay_us(u32 nus)
{               
        u32 temp;                     
        SysTick->LOAD=nus*fac_us; //ê±&#188;&#228;&#188;ó&#212;&#216;                           
        SysTick->VAL=0x00;        //&#199;&#229;&#191;&#213;&#188;&#198;êy&#198;÷
        SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk ;          //&#191;aê&#188;μ1êy         
        do
        {
                temp=SysTick->CTRL;
        }
        while(temp&0x01&&!(temp&0x10000));//μè′yê±&#188;&#228;μ&#189;′&#239;   
        SysTick->CTRL&=~SysTick_CTRL_ENABLE_Msk;       //1&#216;±&#213;&#188;&#198;êy&#198;÷
        SysTick->VAL =0X00;       //&#199;&#229;&#191;&#213;&#188;&#198;êy&#198;÷         
}
回复

使用道具 举报

51

主题

2166

帖子

2

精华

论坛元老

Rank: 8Rank: 8

积分
10653
金钱
10653
注册时间
2017-4-14
在线时间
2780 小时
发表于 2018-5-30 22:03:57 | 显示全部楼层
本帖最后由 275891381 于 2018-5-30 22:16 编辑
hfbai 发表于 2018-5-30 20:51
static u8  fac_us=0;//us&#209;óê±±&#182;3&#203;êy
static u16 fac_ms=0;//ms&#209;óê±±&#182; ...

应该是你的抵达定时器不对,给你试了下,我这个可以,直接PA1电平就好了。。记得发红包
led.rar (258.34 KB, 下载次数: 57)
回复

使用道具 举报

1

主题

6

帖子

0

精华

新手入门

积分
10
金钱
10
注册时间
2018-5-30
在线时间
4 小时
 楼主| 发表于 2018-5-30 23:38:13 | 显示全部楼层
本帖最后由 hfbai 于 2018-5-31 01:16 编辑
275891381 发表于 2018-5-30 22:03
应该是你的抵达定时器不对,给你试了下,我这个可以,直接PA1电平就好了。。记得发红包

非常感谢。烧了你的hex是可以,但我移植之后我的还是那样。难道是被我其他程序的定时器或者中断影响了?大佬能帮我看看我程序吗?这是个学习型红外遥控的调试程序,发送的不对,很难受。(凌晨一点多了还是做不出来
方便的话加我qq:861605860,做出来,真心发百元红包。你可以看这个我按照你的工程添加的程序 led.zip (7.12 MB, 下载次数: 59)

【全系统】 - Copy.zip

3.78 MB, 下载次数: 54

不用看这个

回复

使用道具 举报

51

主题

2166

帖子

2

精华

论坛元老

Rank: 8Rank: 8

积分
10653
金钱
10653
注册时间
2017-4-14
在线时间
2780 小时
发表于 2018-5-31 08:01:44 | 显示全部楼层
hfbai 发表于 2018-5-30 23:38
非常感谢。烧了你的hex是可以,但我移植之后我的还是那样。难道是被我其他程序的定时器或者中断影响了? ...

1:IR_SendData(KEY1_ADDR);   函数里面都没有调用参数SendAddr,就按你就是为了发送sendCode,试了下发送的sendCode[200]是对的
2:接收的时候,中断内你用到delay延时,最好把滴答定时器中断优先级弄高点,最好还是不要用
3:你没描述清楚你的问题是哪里
回复

使用道具 举报

0

主题

2

帖子

0

精华

新手上路

积分
25
金钱
25
注册时间
2017-12-2
在线时间
3 小时
发表于 2018-5-31 10:41:49 | 显示全部楼层
推荐大家一个靠谱的论文检测平台。重复的部分有详细出处以及具体修改意见,能直接在文章上做修改,全部改完一键下载就搞定了。怕麻烦的话,还能用它自带的降重功能。哦对了,他们现在正在做毕业季活动, 赠送很多免费字数,可以说是十分划算了!地址是:http://www.paperpass.com/
回复

使用道具 举报

1

主题

6

帖子

0

精华

新手入门

积分
10
金钱
10
注册时间
2018-5-30
在线时间
4 小时
 楼主| 发表于 2018-5-31 11:05:48 | 显示全部楼层
275891381 发表于 2018-5-31 08:01
1:IR_SendData(KEY1_ADDR);   函数里面都没有调用参数SendAddr,就按你就是为了发送sendCode,试了下发 ...

逻辑分析仪是对的吗?我的问题就是发送的sendCode[200]在示波器上看是错的,结果和前面示波器的图片差不多。那会不会是因为板子的问题了呢
回复

使用道具 举报

51

主题

2166

帖子

2

精华

论坛元老

Rank: 8Rank: 8

积分
10653
金钱
10653
注册时间
2017-4-14
在线时间
2780 小时
发表于 2018-5-31 15:25:05 | 显示全部楼层
hfbai 发表于 2018-5-31 11:05
逻辑分析仪是对的吗?我的问题就是发送的sendCode[200]在示波器上看是错的,结果和前面示波器的图片差不 ...

没有按键,你上传的代码,main改如下,逻辑分析仪数据是对的
int main()
{               
                u16 i;
          u8 temp = 0;       
                NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4);
          delay_init();
    LED_Init();
                KEY_Init();
        LearnKEY_Init();
                TIM2_PWM_Init(1895,0);       
                IR_Init();       
        SendPort_Init();
                LEARN_ON = 0;
                LED_SEND = 1;
          while(1)
                {
                                                         
                                                          IR_SendData(KEY1_ADDR);  // 红外发送
                                                          delay_ms(150);
       
                }       
}
回复

使用道具 举报

1

主题

6

帖子

0

精华

新手入门

积分
10
金钱
10
注册时间
2018-5-30
在线时间
4 小时
 楼主| 发表于 2018-5-31 17:59:24 | 显示全部楼层
275891381 发表于 2018-5-31 15:25
没有按键,你上传的代码,main改如下,逻辑分析仪数据是对的
int main()
{               

这就是真的很怪了。
我把程序改成没有按键的,逻辑分析仪是对的,在示波器上看到的还是错的。
但是烧你最早给我的那个程序,示波器看到的是对的。这是闹哪样啊
回复

使用道具 举报

51

主题

2166

帖子

2

精华

论坛元老

Rank: 8Rank: 8

积分
10653
金钱
10653
注册时间
2017-4-14
在线时间
2780 小时
发表于 2018-5-31 19:02:22 | 显示全部楼层
hfbai 发表于 2018-5-31 17:59
这就是真的很怪了。
我把程序改成没有按键的,逻辑分析仪是对的,在示波器上看到的还是错的。
但是烧你 ...

示波器时好时坏吧,要不然就是供电不稳吧,要不然我也不知道了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-2 20:25

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表