求解 Ai32g8k64 uart2 只有加上 TMOD=0x01; uart2就無法使用, 收發均不能用
本帖最后由 DebugLab 于 2024-11-14 17:04 编辑各位大老, 求解或問題所在
你好, 我有一個問題, 一直沒法解決
原本使用
Ai8g2k64s4和 Ai8h8k64
和式一直很正常
最近改用stc32g8k64
大部份問題都解決
但有個問題 uart2,一直解決不了
我把程序簡化到最簡單
發現 uart2 正常
但只要一加上
TMOD=0x01;
uart2 就無法收法正常
#include "stc32g.h"
sbit RS_485_2 = P4^1;
//===============================================================
//GLOBAL VARIABLE
//===============================================================
bit bU0TX_2 = 0;
//------------------------------------------------------------------------
//UART222.11849600USE TIME21T
//------------------------------------------------------------------------
void Uart2_Init(void) //9600bps@22.1184MHz
{
S2CON = 0x50; //8 bits and variable baudrate
AUXR |= 0x04; //imer clock is 1T mode
T2L = 0xC0; //Initial timer value
T2H = 0xFD; //Initial timer value
AUXR |= 0x10; //Timer2 start run
}
void UART2_Isr() interrupt 8
{
// UART2TI
if (S2CON & 0x02)
{
S2CON &= ~0x02;
bU0TX_2 = 0;
}
// UART2 RI
if (S2CON & 0x01)
{
S2CON &= ~0x01;
}
}
void PutByte2(unsigned char n_temp0)
{
bU0TX_2 = 1;
S2BUF = n_temp0;
while(bU0TX_2)
{
;
}
}
void IO_init(void)
{
P0M0 = 0X00;P0M1 = 0X00;
P1M0 = 0X00;P1M1 = 0X00;
P2M0 = 0X00;P2M1 = 0X00;
P3M0 = 0X00;P3M1 = 0X00;
P4M0 = 0X00;P4M1 = 0X00;
P5M0 = 0X00;P5M1 = 0X00;
P6M0 = 0X00;P6M1 = 0X00;
P7M0 = 0X00;P7M1 = 0X00;
}
void main()
{
// STC32G8K64
WTST = 0; //設置程式指令延時參數,賦值為0可將CPU執行指令的速度設置為最快
EAXFR = 1; //擴展寄存器(XFR)訪問使能/
CKCON = 0; //提高訪問XRAM速度
IO_init();
Uart2_Init();
ES2=1;
// 只要加上行,因為我有程序, 需要要到TIME 的 模式一, 但一加上這行,UART2收發就都不正常
// 我試了快2週, 還是解決不了
//-----------------------------
TMOD=0x10;
//-----------------------------
EA = 1;
RS_485_2=1;
PutByte2('2');
PutByte2('2');
PutByte2('2');
RS_485_2=0;
while(1)
{
}
}
本帖最后由 stonychi 于 2024-11-14 17:03 编辑
不加上TMOD=0x01;
送電會送出 9600, n, 8,1
222
三個2
但一加上TMOD=0x01;
uart2就不能通訊
一直試了二週, 程序已簡化
懹疑是不是蕊片 bug
描述前后不符:
0x01是定时器0,0x10是定时器1,不知道你要用哪个定时器
建议使用TMOD|=0x01或TMOD|=0x10,避免影响其他位
没有看到其他配置定时器的语句
如打开定时器0或定时器1中断,必须有相应的中断函数
本帖最后由 stonychi 于 2024-11-14 17:49 编辑
不好意思, 上面 TMOD=0x10 , 才對
stonychi 发表于 2024-11-14 17:21
不好意思, 上面 TMOD=0x10 , 才對
TMOD不应该影响作为波特率发生器的T2 本帖最后由 stonychi 于 2024-11-14 18:00 编辑
DebugLab 发表于 2024-11-14 17:46
TMOD不应该影响作为波特率发生器的T2
我 uart2便用time2
但只要 time1 便用mode 1, uart 就不能用
我使用 stc8g2k64s4,stc8h8k64 程序都能正常
換上 stc32g8k64 和 stc32g8k64beta 版 都不正常
time0 模式一
time1 模式0
(不影响uart 2 完全正常)
//-----------------------------
TMOD|=0x01;
TH0=0x80;
TL0=0x80;
TR0=1;
TH1=0x80;
TL1=0x80;
TR1=1;
//-----------------------------
//-----------------------------------------------
// 下方uart2只接不能用
//-----------------------------------------------
time0 模式0
time1 模式1
(影响 ---- uart 2 不能用)
//-----------------------------
TMOD|=0x10;
TH0=0x80;
TL0=0x80;
TR0=1;
TH1=0x80;
TL1=0x80;
TR1=1;
//-----------------------------
页:
[1]