为啥我的串口不能发数据 | 已解决
芯片stc8h4k64TL。不使用中断方式来发送和接收。
目前发数据都不行
void Uart3Init(unsigned long BaudRate)
{
GPIO_InitTypeDef GPIO_InitStructure; //结构定义
COMx_InitDefine COMx_InitStructure; //结构定义
UART3_SW(UART3_SW_P50_P51);
GPIO_InitStructure.Pin= UART3_RX_PIN | UART3_TX_PIN; //指定要初始化的IO, GPIO_Pin_0 ~ GPIO_Pin_7
GPIO_InitStructure.Mode = GPIO_PullUp; //指定IO的输入或输出方式,GPIO_PullUp,GPIO_HighZ,GPIO_OUT_OD,GPIO_OUT_PP
GPIO_Inilize(GPIO_P5,&GPIO_InitStructure); //初始化
COMx_InitStructure.UART_Mode = UART_8bit_BRTx; //模式, UART_ShiftRight,UART_8bit_BRTx,UART_9bit,UART_9bit_BRTx
COMx_InitStructure.UART_BRT_Use = BRT_Timer3; //选择波特率发生器, BRT_Timer1, BRT_Timer2 (注意: 串口2固定使用BRT_Timer2)
COMx_InitStructure.UART_BaudRate= BaudRate; //波特率, 一般 110 ~ 115200
COMx_InitStructure.UART_RxEnable= ENABLE; //接收允许, ENABLE或DISABLE
COMx_InitStructure.BaudRateDouble = DISABLE; //波特率加倍, ENABLE或DISABLE
UART_Configuration(UART3, &COMx_InitStructure); //初始化串口1 UART1,UART2,UART3,UART4
}
void Senddata(unsigned d)
{
while(!TI3){
;
}
CLR_TI3();
S3BUF = d;
}
void main(void)
{
unsigned char d = 0x31;
EAXSFR(); /* 扩展寄存器访问使能 */
Uart3Init(UART3_BaudRate);
while(1)
{
Senddata(d);
delay_ms(200);
delay_ms(200);
delay_ms(200);
delay_ms(200);
delay_ms(200);
delay_ms(200);
}
}
不好意思。可以了。顺序错了 那么,改好后的程序是什么样呢?不要烂尾啊。 你可以参考stc提供的示例程序检察下哪里出问题了 guduxue 发表于 2023-12-18 17:31
那么,改好后的程序是什么样呢?不要烂尾啊。
就是Senddata那个函数里面的顺序错了啊。要先把数据放S3BUF里面后再去等待发送完成 我的屠龙刀开发板在定时器中断里调用Printf可以向电脑发送数据,但是在主函数里卡在哪里也不知道怎么回事。 lzl1okOK 发表于 2023-12-29 16:06
我的屠龙刀开发板在定时器中断里调用Printf可以向电脑发送数据,但是在主函数里卡在哪里也不知道怎么回事。 ...
中断嵌套了。不要在中断里面调用printf 爱晴海玩偶 发表于 2023-12-29 16:53
中断嵌套了。不要在中断里面调用printf
不在中断里调用,写在主函数里会卡住,用中断可以输出 爱晴海玩偶 发表于 2023-12-29 16:53
中断嵌套了。不要在中断里面调用printf
问题已经找到
页:
[1]