打印

GD32 485 通讯 问题

[复制链接]
4247|38
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
35650320|  楼主 | 2018-3-24 22:32 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本人用GD32 USART0   用串口助手调试    MCU  只能送出数据,串口能正常接收。                        但是串口助手向MCU ,发送数据MCU 接收不到 ,用示波器 和逻辑分析仪 在RXD   在引脚口检测都能够检测到  信号 但是MCU就是读取不到 ,    搞了一个多星期了 愁死了,  哪位高手指点一下,谢谢 。
沙发
heisexingqisi| | 2018-3-25 17:42 | 只看该作者
那就是你32那边没有写好程序啊。

使用特权

评论回复
板凳
heisexingqisi| | 2018-3-25 17:43 | 只看该作者
http://gd32mcu.21ic.com/documents
去这下载相关资料和例子

使用特权

评论回复
地板
wztoad| | 2018-3-25 20:46 | 只看该作者
很简单,发送转接受时要有足够的延时

使用特权

评论回复
5
heping517| | 2018-3-25 21:32 | 只看该作者
遇到过类似的情况,建议把系统的主频调低点试下

使用特权

评论回复
6
heping517| | 2018-3-25 21:32 | 只看该作者
或者把通信波特率调高

使用特权

评论回复
7
35650320|  楼主 | 2018-3-25 23:58 | 只看该作者
和 STM32  相同的配置    寄存器   ,但是 STM32 的可以接收 和发送  ,GD32的 就是不行我也是醉了  , 哪位高手帮我看一下程序,  实在不行只能换ST芯片了 ,

使用特权

评论回复
8
vibra2016| | 2018-3-26 20:56 | 只看该作者
UART是最基本的呢

使用特权

评论回复
9
35650320|  楼主 | 2018-3-26 23:39 | 只看该作者
别说没用的

使用特权

评论回复
10
877049204| | 2018-3-27 08:29 | 只看该作者
中断接收还是查询接收?看看能不能进中断

使用特权

评论回复
11
lixmlxm| | 2018-3-27 09:21 | 只看该作者
5个串口我都试过,应该是可以的。我的源程序好像少了点东西,不然我把这个程序给你。

使用特权

评论回复
评论
amandaey 2020-4-12 20:53 回复TA
@35650320 :您好,方便问点GD32 485的问题吗 
35650320 2018-4-2 14:51 回复TA
麻烦您把程序发我一下 
12
飞翔的控制器| | 2018-3-27 09:33 | 只看该作者
把代码帖出来,让大空分析下

使用特权

评论回复
13
35650320|  楼主 | 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);               
                       

               
       
               
}

使用特权

评论回复
14
35650320|  楼主 | 2018-3-27 12:51 | 只看该作者
希望有大神尽快能看到 ,帮我解决一下,谢谢

使用特权

评论回复
15
35650320|  楼主 | 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);               
                       

               
       
               
}

使用特权

评论回复
16
35650320|  楼主 | 2018-3-30 11:04 | 只看该作者
没人帮忙看一下吗?

使用特权

评论回复
17
baimiaocun2015| | 2018-3-31 18:30 | 只看该作者
看下你的那个RS485的芯片的是否OK的

使用特权

评论回复
18
35650320|  楼主 | 2018-3-31 18:46 | 只看该作者
485 芯片没有问题 , 我换过几块了都是这个样子 ,另外我把拆下的芯片放在别的 板子上就没有问题。

使用特权

评论回复
19
35650320|  楼主 | 2018-4-2 14:46 | 只看该作者
有没有大声帮忙看一下 ,不行我可以 付费的 。

使用特权

评论回复
20
CharryW| | 2018-4-2 15:17 | 只看该作者
35650320 发表于 2018-3-25 23:58
和 STM32  相同的配置    寄存器   ,但是 STM32 的可以接收 和发送  ,GD32的 就是不行我也是醉了  , 哪 ...

不同芯片都是有区别的,你可以参考一下固件库中的例程

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

6

主题

31

帖子

0

粉丝