STC32G12K12实战:串口通信
STC32G12K128芯片写一个按键通过串口1发送字符串的程序。首先,确认芯片的串口1配置。STC32G系列通常使用UART1,相关的寄存器是P_SW1来选择引脚。默认情况下,UART1的TX是P3.1。
接下来是设置定时器作为波特率发生器。通常用定时器2,模式1,自动重载。需要计算波特率的初始值。使用11.0592MHz晶振,9600波特率的话,TH1的值是0xFD。不过STC32G可能用不同的定时器,可能需要定时器1或定时器2,需要查手册。或者使用T2作为波特率发生器,这时计算方式不同。用的是定时器1,模式2(8位自动重载)。这里可能需要确认,但为了简化,先假设使用定时器1,模式2,波特率9600。
然后是GPIO配置。按键需要接某个IO口,比如P3.2,设置为输入模式,带上拉电阻。检测按键按下时,需要去抖动,可以用延时或软件检测多次。
串口初始化部分,设置SCON寄存器,模式1,允许接收。同时需要启动定时器,设置TH1和TL1的值。接着是中断配置,只需发送,不需要接收中断。不需要开中断,直接查询方式发送。
主程序中,检测按键是否按下,当检测到按键按下时,通过串口发送字符串。发送函数需要循环发送每个字符,使用TI标志位来判断是否发送完成。
需要包含头文件,比如STC32G.H,定义相关的寄存器和位。需要注意STC32G系列的寄存器与传统的8051不同,特别是AUXR寄存器,需要配置定时器的工作模式。
总结步骤:配置UART1,设置定时器,初始化IO,主循环检测按键,发送字符串。需要编写串口初始化函数,按键检测函数,和字符串发送函数。确保所有配置正确,并测试硬件连接是否正确,比如TX引脚是否接对,按键是否接地并通过上拉电阻。
#include "STC32G.H"#define KEY_PIN P32 // 假设按键接P3.2void UART1_Init(void) {P_SW1 &= 0x3F; // UART1默认引脚P3.0/RxD, P3.1/TxDSCON = 0x50; // 模式1,允许接收T2L = 0xE6; // 11.0592MHz@115200T2H = 0xFF; // 定时器2时钟源为sysclk/1AUXR = 0x14; // T2作UART1波特率发生器AUXR |= 0x01; // 启动定时器2
}void SendString(char *str) {while (*str) {SBUF = *str++;while (!TI);TI = 0;}
}void main() {P3M0 &= ~0x04; P3M1 &= ~0x04; // P3.2准双向UART1_Init();while(1) {if (KEY_PIN == 0) { // 检测按键按下__asm__("nop"); // 消抖延时if (KEY_PIN == 0) {SendString("Hello STC32!\r\n");while(!KEY_PIN); // 等待释放}}}
}