GD32 485 通讯 问题

[复制链接]
922|37
 楼主 | 2018-3-24 22:32 | 显示全部楼层 |阅读模式
本人用GD32 USART0   用串口助手调试    MCU  只能送出数据,串口能正常接收。                        但是串口助手向MCU ,发送数据MCU 接收不到 ,用示波器 和逻辑分析仪 在RXD   在引脚口检测都能够检测到  信号 但是MCU就是读取不到 ,    搞了一个多星期了 愁死了,  哪位高手指点一下,谢谢 。
| 2018-3-25 17:42 | 显示全部楼层
那就是你32那边没有写好程序啊。
| 2018-3-25 17:43 | 显示全部楼层
http://gd32mcu.21ic.com/documents
去这下载相关资料和例子
| 2018-3-25 20:46 | 显示全部楼层
很简单,发送转接受时要有足够的延时
| 2018-3-25 21:32 | 显示全部楼层
遇到过类似的情况,建议把系统的主频调低点试下
| 2018-3-25 21:32 | 显示全部楼层
或者把通信波特率调高
 楼主 | 2018-3-25 23:58 | 显示全部楼层
和 STM32  相同的配置    寄存器   ,但是 STM32 的可以接收 和发送  ,GD32的 就是不行我也是醉了  , 哪位高手帮我看一下程序,  实在不行只能换ST芯片了 ,
| 2018-3-26 20:56 | 显示全部楼层
UART是最基本的呢
 楼主 | 2018-3-26 23:39 | 显示全部楼层
别说没用的
| 2018-3-27 08:29 | 显示全部楼层
中断接收还是查询接收?看看能不能进中断
| 2018-3-27 09:21 | 显示全部楼层
5个串口我都试过,应该是可以的。我的源程序好像少了点东西,不然我把这个程序给你。

评论

35650320 2018-4-2 14:51 回复TA
麻烦您把程序发我一下 
| 2018-3-27 09:33 | 显示全部楼层
把代码帖出来,让大空分析下
 楼主 | 2018-3-27 12:50 | 显示全部楼层
OK  我贴出来 , 麻烦大家了



#include "usart.h"
uint8_t data_u;

void delay_ss1(uint16_t k)
{
                uint16_t i,j;
          for(i=k;i>0;i--)
        for(j=255;j>0;j--);

}       



void usart_main(void)
        {                       
                                while(1)
                                {
               
               

               
                                if((usart_flag_get(USART0,USART_FLAG_RBNE))==1)
                                {
                       
                                data_u=usart_data_receive(USART0);
                                       
                                                                if(data_u==0x32)
                       
                {         

                        delay_ss1(10);
                        gpio_bit_set(GPIOB,GPIO_PIN_0);
                       
                        usart_data_transmit(USART0,data_u);
                       
                        while(!(usart_flag_get(USART0,USART_FLAG_TC)));               
                       
                        delay_ss1(50);
                       
                        gpio_bit_reset(GPIOB,GPIO_PIN_0);
               
                        }
                                       
                                }
       

        }       
}


void usart_init(void)
       
{                               
       
   
                       
       
       

       

                       
                        rcu_periph_clock_enable(RCU_USART0);
                       
                                                                                       
               
                        gpio_init(GPIOA, GPIO_MODE_IN_FLOATING, GPIO_OSPEED_50MHZ, GPIO_PIN_10);                       
                       
                       
                        gpio_init(GPIOA, GPIO_MODE_AF_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_9);

                        gpio_init(GPIOB, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_0);  //485¿ØÖÆÒý½Å
       
                       
                        usart_baudrate_set(USART0, 19200);
                       
                        usart_halfduplex_enable(USART0);
       

                       
                        usart_transmit_config(USART0, USART_TRANSMIT_ENABLE);
                       
                        usart_receive_config(USART0, USART_RECEIVE_ENABLE);
                 
                        usart_enable(USART0);
                       

                       
                        usart_data_receive(USART0);
                       
                               
                        gpio_bit_set(GPIOB,GPIO_PIN_0);
               
                        delay_ss1(50);
                       
                        usart_data_transmit(USART0,0X33);
                       
                        while(!(usart_flag_get(USART0,USART_FLAG_TC)));               

                        delay_ss1(50000);
                        delay_ss1(50000);
                       
                        gpio_bit_reset(GPIOB,GPIO_PIN_0);
                       
                        delay_ss1(5000);               
                       

               
       
               
}

 楼主 | 2018-3-27 12:51 | 显示全部楼层
希望有大神尽快能看到 ,帮我解决一下,谢谢
 楼主 | 2018-3-27 12:51 | 显示全部楼层
飞翔的控制器 发表于 2018-3-27 09:33
把代码帖出来,让大空分析下

#include "usart.h"
uint8_t data_u;

void delay_ss1(uint16_t k)
{
                uint16_t i,j;
          for(i=k;i>0;i--)
        for(j=255;j>0;j--);

}       



void usart_main(void)
        {                       
                                while(1)
                                {
               
               

               
                                if((usart_flag_get(USART0,USART_FLAG_RBNE))==1)
                                {
                       
                                data_u=usart_data_receive(USART0);
                                       
                                                                if(data_u==0x32)
                       
                {         

                        delay_ss1(10);
                        gpio_bit_set(GPIOB,GPIO_PIN_0);
                       
                        usart_data_transmit(USART0,data_u);
                       
                        while(!(usart_flag_get(USART0,USART_FLAG_TC)));               
                       
                        delay_ss1(50);
                       
                        gpio_bit_reset(GPIOB,GPIO_PIN_0);
               
                        }
                                       
                                }
       

        }       
}


void usart_init(void)
       
{                               
       
   
                       
       
       

       

                       
                        rcu_periph_clock_enable(RCU_USART0);
                       
                                                                                       
               
                        gpio_init(GPIOA, GPIO_MODE_IN_FLOATING, GPIO_OSPEED_50MHZ, GPIO_PIN_10);                       
                       
                       
                        gpio_init(GPIOA, GPIO_MODE_AF_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_9);

                        gpio_init(GPIOB, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_0);  //485¿ØÖÆÒý½Å
       
                       
                        usart_baudrate_set(USART0, 19200);
                       
                        usart_halfduplex_enable(USART0);
       

                       
                        usart_transmit_config(USART0, USART_TRANSMIT_ENABLE);
                       
                        usart_receive_config(USART0, USART_RECEIVE_ENABLE);
                 
                        usart_enable(USART0);
                       

                       
                        usart_data_receive(USART0);
                       
                               
                        gpio_bit_set(GPIOB,GPIO_PIN_0);
               
                        delay_ss1(50);
                       
                        usart_data_transmit(USART0,0X33);
                       
                        while(!(usart_flag_get(USART0,USART_FLAG_TC)));               

                        delay_ss1(50000);
                        delay_ss1(50000);
                       
                        gpio_bit_reset(GPIOB,GPIO_PIN_0);
                       
                        delay_ss1(5000);               
                       

               
       
               
}
 楼主 | 2018-3-30 11:04 | 显示全部楼层
没人帮忙看一下吗?
| 2018-3-31 18:30 | 显示全部楼层
看下你的那个RS485的芯片的是否OK的
 楼主 | 2018-3-31 18:46 | 显示全部楼层
485 芯片没有问题 , 我换过几块了都是这个样子 ,另外我把拆下的芯片放在别的 板子上就没有问题。
 楼主 | 2018-4-2 14:46 | 显示全部楼层
有没有大声帮忙看一下 ,不行我可以 付费的 。
| 2018-4-2 15:17 | 显示全部楼层
35650320 发表于 2018-3-25 23:58
和 STM32  相同的配置    寄存器   ,但是 STM32 的可以接收 和发送  ,GD32的 就是不行我也是醉了  , 哪 ...

不同芯片都是有区别的,你可以参考一下固件库中的例程
扫描二维码,随时随地手机跟帖
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复

您需要登录后才可以回帖
登录 | 注册
高级模式
我要创建版块 申请成为版主

论坛热帖

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