OpenEdv-开源电子网

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

定时时间极短,为什么定时器中断中还能用printf在串口打印很长字节?

[复制链接]

17

主题

102

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
332
金钱
332
注册时间
2021-1-19
在线时间
56 小时
发表于 2021-6-25 15:20:30 | 显示全部楼层 |阅读模式
2金钱
主函数
int main(void)
{               

        delay_init();                     //延时函数初始化          
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
        uart_init(115200);         //串口初始化为115200
        LED_Init();                             //LED端口初始化
        TIM3_Int_Init(4,7199);//10Khz的计数频率,如果计数到5000为500ms  
           while(1)
        {
                LED0=!LED0;
                delay_ms(200);                  
        }         

}

定时器中断函数
void TIM3_IRQHandler(void)   //TIM3中断
{
        if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET)  //检查TIM3更新中断发生与否
                {
                TIM_ClearITPendingBit(TIM3, TIM_IT_Update  );  //清除TIMx更新中断标志
                LED1=!LED1;
                printf("ssssssssssssssssssssssssssssssssssssss\r\n");
                }
}

定时器抢占优先级0级,子优先级3级;
串口抢占优先级3级,子优先级3级;

最佳答案

查看完整内容[请看2#楼]

明白了,波特率是每秒传输码元符号的个数,115200 Baud即115.2码元每毫秒 这里定时0.5ms,就假设这里打印50个码元符号,50/115.2
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

17

主题

102

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
332
金钱
332
注册时间
2021-1-19
在线时间
56 小时
 楼主| 发表于 2021-6-25 15:20:31 | 显示全部楼层
明白了,波特率是每秒传输码元符号的个数,115200 Baud即115.2码元每毫秒
这里定时0.5ms,就假设这里打印50个码元符号,50/115.2<0.5ms,所以每次中断总能打印完所有字节
如有错误,请指出,大家共同学习
回复

使用道具 举报

17

主题

102

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
332
金钱
332
注册时间
2021-1-19
在线时间
56 小时
 楼主| 发表于 2021-6-25 15:31:32 | 显示全部楼层
我用的是原子的定时器中断例程,大家可以试试
明明打印字节需要很长时间的,为什么这么短的定时都能打印完整这么长的字节
回复

使用道具 举报

12

主题

3389

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
8643
金钱
8643
注册时间
2020-5-11
在线时间
4098 小时
发表于 2021-6-25 15:48:41 | 显示全部楼层
本帖最后由 LcwSwust 于 2021-6-25 15:50 编辑

啥意思来着?“这么短的定时”是指500ms的时间很短?
115200波特率发一字节也就约0.1ms啊,你那一串字符发出来也就只需要4ms左右啊。
专治疑难杂症
回复

使用道具 举报

17

主题

102

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
332
金钱
332
注册时间
2021-1-19
在线时间
56 小时
 楼主| 发表于 2021-6-25 15:53:44 | 显示全部楼层
LcwSwust 发表于 2021-6-25 15:48
啥意思来着?“这么短的定时”是指500ms的时间很短?
115200波特率发一字节也就约0.1ms啊,你那一串字符发 ...

注释写的是500ms,不过代码改了,并不是500ms
回复

使用道具 举报

17

主题

102

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
332
金钱
332
注册时间
2021-1-19
在线时间
56 小时
 楼主| 发表于 2021-6-25 15:55:48 | 显示全部楼层
LcwSwust 发表于 2021-6-25 15:48
啥意思来着?“这么短的定时”是指500ms的时间很短?
115200波特率发一字节也就约0.1ms啊,你那一串字符发 ...

115200波特率发一字节不是约为0.008ms吗?
回复

使用道具 举报

12

主题

3389

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
8643
金钱
8643
注册时间
2020-5-11
在线时间
4098 小时
发表于 2021-6-25 15:58:38 | 显示全部楼层
龙的传人98 发表于 2021-6-25 15:55
115200波特率发一字节不是约为0.008ms吗?

串口1字节一般是10码元:起始位+8位数据+停止位=10位.
波特率也叫位速率,拿示波器看看就明白了。
你前面算得不对。
专治疑难杂症
回复

使用道具 举报

17

主题

102

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
332
金钱
332
注册时间
2021-1-19
在线时间
56 小时
 楼主| 发表于 2021-6-25 16:05:32 | 显示全部楼层
LcwSwust 发表于 2021-6-25 15:58
串口1字节一般是10码元:起始位+8位数据+停止位=10位.
波特率也叫位速率,拿示波器看看就明白了。
你前 ...

哦哦,这里我说传一个字节没有考虑起始位和停止位的确有问题
不过,你说的10位应该就是1码元吧
回复

使用道具 举报

12

主题

3389

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
8643
金钱
8643
注册时间
2020-5-11
在线时间
4098 小时
发表于 2021-6-25 16:09:07 | 显示全部楼层
龙的传人98 发表于 2021-6-25 16:05
哦哦,这里我说传一个字节没有考虑起始位和停止位的确有问题
不过,你说的10位应该就是1码元吧

我不习惯码元,1码元应当是1位吧。
专治疑难杂症
回复

使用道具 举报

17

主题

102

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
332
金钱
332
注册时间
2021-1-19
在线时间
56 小时
 楼主| 发表于 2021-6-25 16:17:02 | 显示全部楼层
LcwSwust 发表于 2021-6-25 16:09
我不习惯码元,1码元应当是1位吧。

我看网上说码元不是这个意思哦,可能我们还得再学习下,或者等高人指导
回复

使用道具 举报

4

主题

83

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
205
金钱
205
注册时间
2019-11-12
在线时间
77 小时
发表于 2021-6-25 16:18:23 | 显示全部楼层
波特率是bit位/s  一个字节8bit 再加起始位 停止位 校验位之类可配置的东西, 一般115200大概1ms一个字节。不过这些并不是你帖子的原因,实际上定时中断里你发多少都没问题,如果干的活超过了中断频率 只会让计时不准而已。你上面的程序虽然设定0.5ms进一次中断,但是你串口发送之后,就不是0.5ms进一次了。
回复

使用道具 举报

12

主题

3389

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
8643
金钱
8643
注册时间
2020-5-11
在线时间
4098 小时
发表于 2021-6-25 16:25:47 | 显示全部楼层
龙的传人98 发表于 2021-6-25 16:17
我看网上说码元不是这个意思哦,可能我们还得再学习下,或者等高人指导

看过串口波形吗?建议看看串口发一字节要多长时间。正点原子DS100你值得拥有

专治疑难杂症
回复

使用道具 举报

12

主题

3389

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
8643
金钱
8643
注册时间
2020-5-11
在线时间
4098 小时
发表于 2021-6-25 16:26:19 | 显示全部楼层
nstopb 发表于 2021-6-25 16:18
波特率是bit位/s  一个字节8bit 再加起始位 停止位 校验位之类可配置的东西, 一般115200大概1ms一个字节。 ...

115200可不是1ms一个字节,9600才是。
专治疑难杂症
回复

使用道具 举报

4

主题

83

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
205
金钱
205
注册时间
2019-11-12
在线时间
77 小时
发表于 2021-6-25 17:00:52 | 显示全部楼层
LcwSwust 发表于 2021-6-25 16:26
115200可不是1ms一个字节,9600才是。

昂,算错了, 大概1ms 10多个字节
回复

使用道具 举报

17

主题

102

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
332
金钱
332
注册时间
2021-1-19
在线时间
56 小时
 楼主| 发表于 2021-6-25 17:15:09 | 显示全部楼层
都是大佬,感谢
回复

使用道具 举报

16

主题

136

帖子

0

精华

高级会员

Rank: 4

积分
577
金钱
577
注册时间
2020-11-19
在线时间
113 小时
发表于 2021-6-26 10:33:51 | 显示全部楼层
中断又不能中断自己,只有等自己中断执行完了,才能进下一个自己的中断。
八十、八十、八十!
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-23 05:27

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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