爱晴海玩偶 发表于 2023-12-4 20:04:59

为啥我的串口不能发数据 | 已解决

芯片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);
    }      
}



爱晴海玩偶 发表于 2023-12-4 20:22:03

不好意思。可以了。顺序错了

guduxue 发表于 2023-12-18 17:31:17

那么,改好后的程序是什么样呢?不要烂尾啊。

嵌入式之路 发表于 2023-12-18 19:31:50

你可以参考stc提供的示例程序检察下哪里出问题了

爱晴海玩偶 发表于 2023-12-29 11:47:36

guduxue 发表于 2023-12-18 17:31
那么,改好后的程序是什么样呢?不要烂尾啊。

就是Senddata那个函数里面的顺序错了啊。要先把数据放S3BUF里面后再去等待发送完成

lzl1okOK 发表于 2023-12-29 16:06:23

我的屠龙刀开发板在定时器中断里调用Printf可以向电脑发送数据,但是在主函数里卡在哪里也不知道怎么回事。

爱晴海玩偶 发表于 2023-12-29 16:53:58

lzl1okOK 发表于 2023-12-29 16:06
我的屠龙刀开发板在定时器中断里调用Printf可以向电脑发送数据,但是在主函数里卡在哪里也不知道怎么回事。 ...

中断嵌套了。不要在中断里面调用printf

lzl1okOK 发表于 2023-12-29 17:07:10

爱晴海玩偶 发表于 2023-12-29 16:53
中断嵌套了。不要在中断里面调用printf

不在中断里调用,写在主函数里会卡住,用中断可以输出

lzl1okOK 发表于 2023-12-29 21:17:40

爱晴海玩偶 发表于 2023-12-29 16:53
中断嵌套了。不要在中断里面调用printf

问题已经找到
页: [1]
查看完整版本: 为啥我的串口不能发数据 | 已解决