找回密码
 立即注册
查看: 447|回复: 11

8G1K07-QFN20程序,定时器同时使用问题

[复制链接]
已绑定手机

4

主题

22

回帖

66

积分

注册会员

积分
66
发表于 2024-12-20 14:59:18 | 显示全部楼层 |阅读模式

问题:我想用uart2输出数据,定时器1定1ms输出一次数据,定时器0计数外部输入,不使能定时器0中断的时候,可以输出数据,使能定时器0中断后就不输出数据了,不知道为什么不能同时使用。

void Timer_config(void)
{
TMOD =0x00;
TL1 = 0x66; //65536-11.0592M/12/1000
TH1 = 0xfc;

TR1 = 1;                                    //启动定时器
ET1 = 1;                                    //使能定时器中断

}

void T_count(void)
{
TMOD = 0x04; //外部计数模式,自动重载值
TL0 = 0xff;
TH0 = 0xff;
TR0 = 1; //启动定时器
//ET0 = 1; //使能定时器中断
}

void Timer0_ISR_Handler (void) interrupt TMR0_VECTOR //进中断时已经清除标志
{
READ_COUNT0++;
}

void Timer1_ISR_Handler (void) interrupt TMR1_VECTOR //进中断时已经清除标志
{

   READ_COUNT1=TH0;
   READ_COUNT1=READ_COUNT1<<8+TL0+READ_COUNT0*65536;
   READ_COUNT0=0;
   TH0=0;TL0=0;
   printf("%d\r",READ_COUNT1);
   READ_COUNT1=0;

}

/******************** task A *************************/
void main(void)
{
EAXSFR(); /
扩展寄存器访问使能 */
GPIO_config();
UART_config();
UART_config();
Timer_config();
T_count();
EA = 1;

printf("****************printf test********************** \r\n");  

while (1)//改为1ms计数一次判断高低电平
{  
  
}

}

image.png定时器0 开启ET0=1;后情况

image.png定时器0 屏蔽 //ET0=1;后情况

回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:423
  • 最近打卡:2025-05-01 07:10:25
已绑定手机

76

主题

4833

回帖

8343

积分

超级版主

DebugLab

积分
8343
发表于 2024-12-20 15:15:37 | 显示全部楼层
修改中断优先级试试
DebugLab
回复 支持 反对

使用道具 举报 送花

已绑定手机

4

主题

22

回帖

66

积分

注册会员

积分
66
发表于 2024-12-20 15:16:40 | 显示全部楼层
Debu*** 发表于 2024-12-20 15:15
修改中断优先级试试

好的,我看看,谢谢
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:415
  • 最近打卡:2025-04-30 09:58:34
已绑定手机

39

主题

2006

回帖

6841

积分

论坛元老

积分
6841
发表于 2024-12-20 15:38:20 | 显示全部楼层

在中断里调用串口打印功能,要注意避免相互锁死。

如果在A中断里发送,而判断标志又是在B中断里清除,并且两个中断优先级又相同的话就会相互锁死。

A中断需要等待B中断执行后才能继续往下执行,B中断需要等待A中断执行结束后才能触发。

还是不行的话请提供可以复现问题的,最简化的,完整的项目程序,这样才好分析。

回复 支持 反对

使用道具 举报 送花

已绑定手机

4

主题

22

回帖

66

积分

注册会员

积分
66
发表于 2024-12-20 16:25:14 | 显示全部楼层
乘风*** 发表于 2024-12-20 15:38
在中断里调用串口打印功能,要注意避免相互锁死。
如果在A中断里发送,而判断标志又是在B中断里清除,并且 ...

好的,谢谢您,我正在测。
回复 支持 反对

使用道具 举报 送花

已绑定手机

4

主题

22

回帖

66

积分

注册会员

积分
66
发表于 2024-12-20 17:04:54 | 显示全部楼层
STM8G*** 发表于 2024-12-20 15:16
好的,我看看,谢谢

谢谢,已经可以了就是打印输出数据有正有负不知道为什么,我的数据时u16格式的。
回复 支持 反对

使用道具 举报 送花

已绑定手机

4

主题

22

回帖

66

积分

注册会员

积分
66
发表于 2024-12-20 17:06:35 | 显示全部楼层

image.png
image.png按道理都应该是正数才对。不应该有负数,而且数据应该稳定不应该有大有小的。

回复 支持 反对

使用道具 举报 送花

已绑定手机

4

主题

22

回帖

66

积分

注册会员

积分
66
发表于 2024-12-20 17:07:32 | 显示全部楼层
乘风*** 发表于 2024-12-20 15:38
在中断里调用串口打印功能,要注意避免相互锁死。
如果在A中断里发送,而判断标志又是在B中断里清除,并且 ...

您好已经可以了,谢谢您,就是输出数据不对,请有时间也帮我看看吧。

点评

16位无符号要用%u  发表于 2024-12-21 11:10
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:415
  • 最近打卡:2025-04-30 09:58:34
已绑定手机

39

主题

2006

回帖

6841

积分

论坛元老

积分
6841
发表于 2024-12-20 17:18:44 | 显示全部楼层
STM8G*** 发表于 2024-12-20 17:07
您好已经可以了,谢谢您,就是输出数据不对,请有时间也帮我看看吧。

使用printf输出参考这个帖子:
printf函数 的 格式参数; USB接口 使用 printf 打印数据
https://www.stcaimcu.com/forum.php?mod=viewthread&tid=6864
(出处: 国芯技术交流网站)
回复 支持 反对

使用道具 举报 送花

已绑定手机

4

主题

22

回帖

66

积分

注册会员

积分
66
发表于 2024-12-25 09:40:12 | 显示全部楼层
STM8G*** 发表于 2024-12-20 17:07
您好已经可以了,谢谢您,就是输出数据不对,请有时间也帮我看看吧。
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-2 07:00 , Processed in 0.168798 second(s), 116 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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