linhaishenhuxi 发表于 5 天前

8G1K08 UART1引脚变更

8G1K08 UART1引脚由P1.6 P1.7变更 到P3.6 P3.7之后,串口不能正常收发数据请问是什么原因:

以下为我原来的代码,只是将UART1_SW(UART1_SW_P16_P17)改为UART1_SW(UART1_SW_P36_P37)后串口就不工作了


void UART1_Init(void)
{      
      SCON |= 0x50;//^4=1允许串口接收,^7=0 可变波特率8位数据方式
      T2L = BRT;
      T2H = BRT >> 8;
      AUXR = 0x15;//^0=1,串口波特率发生器为定时器2,^2=1为CPU时钟不分频(1T),^4=1开始计数
      UART1_Priority(0);
      UART1_SW(UART1_SW_P16_P17);                //UART2_SW_P10_P11,UART2_SW_P46_P47
      ES = 1;
}

国芯人工智能 发表于 5 天前

根据您提供的信息,STC8G1K08芯片在将UART1的引脚从P16/P17更改为P36/P37后,串口无法正常收发数据。以下是可能的原因分析及建议:

1. 引脚功能配置错误
   STC8G1K08的P36和P37是否支持UART1功能?需要确认该型号的数据手册中关于P36和P37的引脚功能描述。部分引脚可能被定义为其他功能(如ADC、I2C等),需确保其未被其他模块占用,并且已正确配置为UART1功能。

2. UART1SW宏定义问题
   您提到将UART1SW(UART1SWP16P17)改为UART1SW(UART1SWP36P37),请检查所使用的开发环境或库函数中是否支持P36/P37作为UART1的引脚配置。若该宏定义不存在或不适用,可能导致引脚未被正确初始化。

3. GPIO模式设置缺失
   在使用UART1时,需确保对应引脚的GPIO模式设置为复用功能(Alternate Function)。若仅修改了UART1SW而未设置P36/P37为复用模式,可能导致引脚无法输出/输入正确的信号。

4. 波特率配置异常
   更换引脚后,是否影响了定时器2的运行?检查AUXR寄存器中的相关位(如T2MODE、T2CLK)是否配置正确。此外,BRT值是否适配新的引脚配置,也可能影响通信稳定性。

5. 硬件连接问题
   请确认P36和P37是否与外部设备正确连接,包括电平匹配、接线是否牢固、是否有短路或断路等情况。

6. 中断使能与接收使能
   确保ES = 1;已正确开启串口中断,并且SCON |= 0x50;中允许接收(SCON^4=1)的设置无误。

建议操作步骤:
查阅STC8G1K08数据手册,确认P36/P37是否支持UART1功能;
检查开发环境或库函数中是否提供对P36/P37的UART1引脚配置;
添加GPIO模式设置代码,例如:P3M1 &= ~0xC0; P3M2 &= ~0xC0; P3M1 |= 0xC0;(假设P36/P37为复用模式);
验证波特率计算是否合理,确保定时器2工作正常;
使用示波器或逻辑分析仪检测P36/P37的信号是否正常。

若您提供更多代码细节或开发环境信息,可进一步协助定位问题。

[本文内容由国芯人工智能辅助生成,仅供参考]

DebugLab 发表于 5 天前

检查IO模式(PxMx)

_奶咖君_ 发表于 4 天前

TxRx 接反了?

ercircle 发表于 4 天前

注意检查下切换寄存器定义不同,还不行的话上传完整代码和电路图看下:



页: [1]
查看完整版本: 8G1K08 UART1引脚变更