- 打卡等级:初来乍到
- 打卡总天数:1
- 最近打卡:2026-02-20 19:25:49
已绑定手机
新手上路
- 积分
- 5
|
用的芯片是stc32g12k128,还有8k48,用的都是站内的irda代码,红外接收模块是TFBS4652-TT1
配置成115200波特率的时候都正常,收发正常
但是配置成9600的时候只有单片机发出的我正常能收到,单片机收不到我发出的消息,就是中断都没有触发,
至于模块红外模块我用stm32的芯片测试9600波特率是好的,就是stc一直不行
代码部分只是修改了串口部分和irda部分,波特率是#define MAIN_Fosc 11059200L
void UartInit(void)
{
P_SW1 = (P_SW1 & 0x3F) | (2 << 6); //0:P30_P31, 1:P36_P37, 2:P16_P17, 3:P43_P44
SCON = 0x50; //8位数据,可变波特率
AUXR |= 0x40; //定时器时钟1T模式
AUXR &= 0xFE; //串口1选择定时器1为波特率发生器
TMOD &= 0x0F; //设置定时器模式
TL1 = TM; //设置定时初始值
TH1 = TM>>8; //设置定时初始值
ET1 = 0; //禁止定时器中断
TR1 = 1; //定时器1开始计时
ES = 1; //允许中断
}
void IrDAInit(void)
{
SMOD = 1; //串口1波特率加倍(必需)
USARTCR2 = 0x80; //enable irDA 普通模式
USARTCR3 = 6; //SYSclk/(16*6)=115200, 低电模式波特率
USARTBRL = 0x06; //SYSclk/(16*115200): 设置波特率115200
USARTBRH = 0x00;
}
9600波特率用isp生成的
void Uart1_Init(void) //9600bps@11.0592MHz
{
SCON = 0x50; //8位数据,可变波特率
AUXR |= 0x40; //定时器时钟1T模式
AUXR &= 0xFE; //串口1选择定时器1为波特率发生器
TMOD &= 0x0F; //设置定时器模式
TL1 = 0xE0; //设置定时初始值
TH1 = 0xFE; //设置定时初始值
ET1 = 0; //禁止定时器中断
TR1 = 1; //定时器1开始计时
ES = 1; //使能串口1中断
}
void IrDAInit(void)
{
SMOD = 1; //串口1波特率加倍(必需)
USARTCR2 = 0x80; //enable irDA 普通模式
USARTCR3 = 72; //SYSclk/(16*6)=115200, 低电模式波特率
USARTBRL = 0x48; //SYSclk/(16*115200): 设置波特率115200
USARTBRH = 0x00;
}
|
|