3682|8

932

帖子

3

TA的资源

纯净的硅(中级)

楼主
 

【GD32F307E-START】+串口通讯测试 [复制链接]

 

    这两天时行了串口通讯的测试,开始我在原来测试平台上添加从厂家范例中复制过来的代码,串口通讯助手毫无反映情况,反复查阅之前各位老师的帖子并逐行代码对照也未发现差异,但运行就是不成功,直接编译厂家的范例,测试也是不行,最后才发现我使用的是GD32F307C_EVAL的范例,与GD32F307_START板子有细微的差别,下图是开始使用的范例,这引起范例是配合EVAL板子的:

    配合START板子的范例在这里:

    START板子只有两个范例:

    经过对比,原来是使用的引脚不同,START板子USART0使用B6和B7两个引脚:

    而EVAL板子USART0使用A9和A10两个引脚:

    只怪我粗心大意,没仔细分辨。

    范例中只有发送的代码,没看到接收的代码,参照大家的帖子介绍以及EVAL板子的范例,我尝试写了接收并转发的代码:

        if(RESET != usart_interrupt_flag_get(USART0, USART_INT_FLAG_RBNE)){
            // read one byte from the receive data register 从接收数据寄存器读取一个字节
            rx_buffer[rx_counter] = (uint8_t)usart_data_receive(USART0);
            printf("\r\n %d ",rx_buffer[rx_counter++]);
            if(rx_counter >= nbr_data_to_read)
            {
                // disable the USART0 receive interrupt 禁用USART0接收中断
                usart_interrupt_disable(USART0, USART_INT_RBNE);
            }
			LCD_write_ASCII(30,6,1,rx_buffer);
         }

    同时还写了键按下就发送当前日期时间的代码:

        if(RESET == gd_eval_key_state_get(KEY_WAKEUP)){

            delay_1ms(100);
			if(RESET == gd_eval_key_state_get(KEY_WAKEUP)){
                /* turn on LED1 */
                gd_eval_led_on(LED1);
                /* output a message on hyperterminal using printf function */
                printf("\r\n 当前时间是%d年%d月%d日%d时%d分 \r\n", year, month, day, hour, minute);
                printf("\r\n %s \r\n",Text);
                /* wait for completion of USART transmission */
                while(RESET == usart_flag_get(EVAL_COM1, USART_FLAG_TC)){
				}
			}
        }

    测试时发现发送正常,但接收不到全部数据,下图是测试的过程:

    这是串口调试助手接收到的完整数据:

    但串口调试助手向单片机发送数据,接收到的却不完整:

    接着测试中断模式,中断处理的代码如下:

void USART0_IRQHandler(void)
{
    if(RESET != usart_interrupt_flag_get(USART0, USART_INT_FLAG_RBNE)){
        /* read one byte from the receive data register 从接收数据寄存器读取一个字节*/
        rx_buffer[rx_counter] = (uint8_t)usart_data_receive(USART0);
        printf("\r\n %d ",rx_buffer[rx_counter++]);

        if(rx_counter >= nbr_data_to_read)
        {
            /* disable the USART0 receive interrupt 禁用USART0接收中断*/
            usart_interrupt_disable(USART0, USART_INT_RBNE);
        }
    }
       
    if(RESET != usart_interrupt_flag_get(USART0, USART_INT_FLAG_TBE)){
        /* write one byte to the transmit data register 向传输数据寄存器写入一个字节*/
        usart_data_transmit(USART0, tx_buffer[tx_counter++]);

        if(tx_counter >= nbr_data_to_send)
        {
            /* disable the USART0 transmit interrupt 禁用USART0传输中断*/
            usart_interrupt_disable(USART0, USART_INT_TBE);
            printf("\r\n %d ",rx_buffer[rx_counter++]);
			LCD_write_ASCII(30,6,1,rx_buffer);
        }
    }
}

 

    测试结果仍是没有接收到完整的数据:

    看来还需要设定每次接收的字节数才行。

 

最新回复

真会玩,感觉楼主自由时间很多的样子。   详情 回复 发表于 2020-11-24 13:16

赞赏

1

查看全部赞赏

点赞(1) 关注
 
 

回复
举报

932

帖子

3

TA的资源

纯净的硅(中级)

沙发
 

    我添加了下列代码,开始设置参数为16,后来改为2,测试发现长度没有变化:

usart_block_length_config(USART0,2);

    下面代码的截图:

    这是串口调试助手的截图,窗口上部分是设置长度为16的测试结果,下部分是设置长度为2的结果,均与原来没有设置相同,看来不是使用这个函数改变设置。

 

 
 
 

回复

1942

帖子

3

TA的资源

版主

板凳
 

老哥开发板可真多!羡慕ing。一看就是大佬级别的。

点评

    过奖了,我最多才算是刚入门,照片上的基本上是自己制作的扩展板,可以方便进行各种实验,避免用杜邦线的不方便。  详情 回复 发表于 2020-11-23 07:53
 
 
 

回复

932

帖子

3

TA的资源

纯净的硅(中级)

4
 
w494143467 发表于 2020-11-22 20:22 老哥开发板可真多!羡慕ing。一看就是大佬级别的。

    过奖了,我最多才算是刚入门,照片上的基本上是自己制作的扩展板,可以方便进行各种实验,避免用杜邦线的不方便。

点评

那也厉害,我基本都是用杜邦线弄,要不就洞洞板做个扩展板。  详情 回复 发表于 2020-11-23 09:01
 
 
 

回复

1942

帖子

3

TA的资源

版主

5
 
hujj 发表于 2020-11-23 07:53     过奖了,我最多才算是刚入门,照片上的基本上是自己制作的扩展板,可以方便进行各种实验, ...

那也厉害,我基本都是用杜邦线弄,要不就洞洞板做个扩展板。

点评

    我开始也是用杜邦线加洞洞板,但飞线太多不易排查连接错误,后来陆续自己画板打样,这样做测试比较方便,可以减少杜邦线连接错误或因接触不良造成硬件故障,下面是我陆续打样的部分板子: [attachi  详情 回复 发表于 2020-11-23 12:36
 
 
 

回复

1万

帖子

2853

TA的资源

管理员

6
 

兆易GD32307E-START测评

汇总贴:https://bbs.eeworld.com.cn/thread-1143008-1-1.html 

加EE小助手好友,
入技术交流群
EE服务号
精彩活动e手掌握
EE订阅号
热门资讯e网打尽
聚焦汽车电子软硬件开发
认真关注技术本身
个人签名玩板看这里:
https://bbs.eeworld.com.cn/elecplay.html
EEWorld测评频道众多好板等你来玩,还可以来频道许愿树许愿说说你想要玩的板子,我们都在努力为大家实现!
 
 
 

回复

932

帖子

3

TA的资源

纯净的硅(中级)

7
 
w494143467 发表于 2020-11-23 09:01 那也厉害,我基本都是用杜邦线弄,要不就洞洞板做个扩展板。

    我开始也是用杜邦线加洞洞板,但飞线太多不易排查连接错误,后来陆续自己画板打样,这样做测试比较方便,可以减少杜邦线连接错误或因接触不良造成硬件故障,下面是我陆续打样的部分板子:

 

点评

可以可以,后期我也要做这种扩展板。  详情 回复 发表于 2020-11-23 13:38
 
 
 

回复

1942

帖子

3

TA的资源

版主

8
 
hujj 发表于 2020-11-23 12:36     我开始也是用杜邦线加洞洞板,但飞线太多不易排查连接错误,后来陆续自己画板打样,这样做 ...

可以可以,后期我也要做这种扩展板。

 
 
 

回复

7671

帖子

18

TA的资源

五彩晶圆(高级)

9
 

真会玩,感觉楼主自由时间很多的样子。

个人签名

默认摸鱼,再摸鱼。2022、9、28

 
 
 

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

查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表