找回密码
 立即注册
查看: 1066|回复: 8

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

[复制链接]
  • 打卡等级:初来乍到
  • 打卡总天数:2
  • 最近打卡:2025-04-02 14:25:29

7

主题

17

回帖

163

积分

注册会员

积分
163
发表于 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);
    }        
}



回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:2
  • 最近打卡:2025-04-02 14:25:29

7

主题

17

回帖

163

积分

注册会员

积分
163
发表于 2023-12-4 20:22:03 | 显示全部楼层
不好意思。可以了。顺序错了
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:1
  • 最近打卡:2024-03-26 16:55:01

0

主题

1

回帖

16

积分

新手上路

积分
16
发表于 2023-12-18 17:31:17 | 显示全部楼层
那么,改好后的程序是什么样呢?不要烂尾啊。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:466
  • 最近打卡:2025-06-16 09:07:17

17

主题

533

回帖

1396

积分

金牌会员

积分
1396
发表于 2023-12-18 19:31:50 | 显示全部楼层
你可以参考stc提供的示例程序检察下哪里出问题了
自信就会温和,温和就会坚定!
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:2
  • 最近打卡:2025-04-02 14:25:29

7

主题

17

回帖

163

积分

注册会员

积分
163
发表于 2023-12-29 11:47:36 | 显示全部楼层
gudu*** 发表于 2023-12-18 17:31
那么,改好后的程序是什么样呢?不要烂尾啊。

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

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:457
  • 最近打卡:2025-06-16 06:01:58

5

主题

297

回帖

2288

积分

金牌会员

积分
2288
发表于 2023-12-29 16:06:23 | 显示全部楼层
我的屠龙刀开发板在定时器中断里调用Printf可以向电脑发送数据,但是在主函数里卡在哪里也不知道怎么回事。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:2
  • 最近打卡:2025-04-02 14:25:29

7

主题

17

回帖

163

积分

注册会员

积分
163
发表于 2023-12-29 16:53:58 | 显示全部楼层
lzl1*** 发表于 2023-12-29 16:06
我的屠龙刀开发板在定时器中断里调用Printf可以向电脑发送数据,但是在主函数里卡在哪里也不知道怎么回事。 ...

中断嵌套了。不要在中断里面调用printf
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:457
  • 最近打卡:2025-06-16 06:01:58

5

主题

297

回帖

2288

积分

金牌会员

积分
2288
发表于 2023-12-29 17:07:10 | 显示全部楼层
爱晴*** 发表于 2023-12-29 16:53
中断嵌套了。不要在中断里面调用printf

不在中断里调用,写在主函数里会卡住,用中断可以输出
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:457
  • 最近打卡:2025-06-16 06:01:58

5

主题

297

回帖

2288

积分

金牌会员

积分
2288
发表于 2023-12-29 21:17:40 | 显示全部楼层
爱晴*** 发表于 2023-12-29 16:53
中断嵌套了。不要在中断里面调用printf

问题已经找到
回复 支持 反对

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-6-16 19:44 , Processed in 0.149176 second(s), 99 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表