STC8A8K64D4串口1升级、串口4调试
本帖最后由 宁友元 于 2024-7-8 17:06 编辑cpu初始化:
void cpu_init(void)
{
//VOCTRL = 0x80;//掉电模式时使用内部SCC模块,功耗约1.5uA
EA = 0;
IT0 = 0;
EX0 = 1;
P_SW1 = 0x00;
P_SW2 = 0x00;
IE = 0x00; //清除所有中断
IE2 = 0x00; //清除所有中断
//stc_io_init();
uart1_init(); // 升级和CPU通信串口
uart4_init(); // 调试串口
Timer4Init();
EA = 1;
}
串口1初始化:
void uart1_init()
{
SCON = 0xD0; // 串口数据模式必须为 8 位数据 +1 位偶检验
TMOD = 0x00;
T2L = BRT;
T2H = BRT >> 8;
AUXR = 0x15;
ES = 1;
EA = 1;
wptr = 0x00;
rptr = 0x00;
busy = 0;
P3M0 |= 0x0C;
P3M1 |= 0x0C;
}
串口4初始化:
void uart4_init(void)
{
S4CON = 0x10;
#if 1
T2L = BRT;
T2H = BRT >> 8;
AUXR = 0x14;
#endif
wptr = 0x00;
rptr = 0x00;
busy = 0;
IE2 |= ES4;
}
timer4初始化:
void Timer4Init(void)
{
T4T3M |= 0x20;
T4L = 0x40; // (65536 - 24M/1000)
T4H = 0xA2;
T4T3M |= 0x80;
IE2 |= ET4;
}
主程序:
int main(void)
{
cpu_init();
mdelay(1000);
printf("\r\n\r\nSTC8A8K84D64 system start.\r\n");
WDT_CONTR = 0x27;
while(1)
{
WDT_CONTR |= 0x10;
printf("STC8A8K84D64 timer 1s\r\n");
}
return 0;
}
STC8A8K64D4取代STC8A8K64S4A12后,上述代码调试串口4输出没有反应,请问下是什么原因
原理图如下:
神农鼎 发表于 2024-7-8 17:16
void stc_io_init(void)
{
P0M1 &= ~0xFF;
P0M0 &= ~0xFF;
P1M1 &= ~0xFF;
P1M0 &= ~0xFF;
P2M1 &= ~0xFF;
P2M0 &= ~0xFF;
P3M1 &= ~0xFF;
P3M0 &= ~0xFF;
P4M1 &= ~0xFF;
P4M0 &= ~0xFF;
P5M1 &= ~0xFF;
P5M0 &= ~0xFF;
}
你说的这些我这边都考虑到了,把串口初始化跟就的mcu一致,寄存器的映射表也有更新,目前还是不行; 本帖最后由 hsrzq 于 2024-7-8 21:03 编辑
1. uart1_init中AUXR = 0x15,串口1手动选择了T2作为波特率发生器;
2. uart4_init中AUXR = 0x14,你又将串口1的波特率发生器改回了T1;
3. 另外uart1_init和uart4_init都重置了wptr、rptr、busy,高度怀疑buffer也复用了;
4. 最后通篇未见初始化T1,又多余初始化了T4,咋看串口1、串口4都正常不了。
hsrzq 发表于 2024-7-8 20:54
1. uart1_init中AUXR = 0x15,串口1手动选择了T2作为波特率发生器;
2. uart4_init中AUXR = 0x14,你又将串 ...
STC8A8K64D4和STC8A8K64S4A12的uart1外接串口升级这块有变化没,目前板子更新到STC8A8K64D4,使用原厂提供的uart4固件通过uart1升级到板子上没有反应,不清楚是uart1上电初始化的模式变了还是硬件电路的rx和tx没接好;使用老的mcu和对应uart4的固件,板子启动通过uart4输出了打印信息说明固件是升级进去而且运行成功了; 很好的讲解! 宁友元 发表于 2024-7-9 12:42
STC8A8K64D4和STC8A8K64S4A12的uart1外接串口升级这块有变化没,目前板子更新到STC8A8K64D4,使用原厂提 ...
麻烦回复一下,这个很关键,能判断出是硬件问题还是软件问题没? 宁友元 发表于 2024-7-9 17:18
麻烦回复一下,这个很关键,能判断出是硬件问题还是软件问题没?
挺关键。还不把最简工程和原理图发上来 现在只需要判断一下STC8A8K64D4和STC8A8K64S4A12,通过串口uart1升级的方式是不是一样的就行,估计是STC8A8K64D4通过uart1代码都没升级进去 电路图一开始就列出来了
页:
[1]