(实测可用)GD32F303RCT6开发板移植RT-Thread操作系统(添加串口RS485线程进行串口收发)

news/2024/9/8 4:33:36/

 一、开发板平台简介:

1、开发板资源简介

(1)开发板主芯片型号:GD32F303RCT6

(2)开发板主芯片封装:LQFP-64_10x10x05P

(3)开发板主芯片内核:ARM® Cortex®-M4

(4)开发板主芯片主频:120MHz

(5)开发板主芯片Flash大小:256KB

(6)开发板主芯片RAM大小:48KB

2、Debug调试串口简介

        串口全称为串行通讯接口,即数据在通信线上一次传输一位,按先后一定顺序传输。我们通常所说的单片机串口准确来说应该是串行异步收发传输器(Universal Asynchronous Receiver/Transmitter,UART),使用TTL电平,串口需要RXD、TXD、GND三根线进行通信。

(1)我们选用的GD32F303RCT6开发板串口0已通过USB转TLL串口芯片CH340G引出,使用时,只需要用公对公USB线连接电脑即可(注意也得安装CH340G驱动)。

(2)开发板上的其他串口已通过排针引出,为TTL电平,通信的时候需要注意选择对应的电平模块,如USB转TTL串口模块等。

二、快速上手RT-Thread

1、选择合适的BSP

(1)我们这里选择GD32303E-EVAL BSP驱动进行移植。可通过如下参考链接下载bsp:

GD32303E-EVALhttps://github.com/RT-Thread/rt-thread/tree/master/bsp/gd32303e-eval

(2)下载上述bsp后就可以在开发板上进行移植尝试了。

2、移植BSP

        已下载的GD32303E-EVEL BSP工程文件,是使用 GD32F303ZET6 作为主控制器的,想要移植到我们的GD32F303RCT6开发板上,需要进行简单的修改,如下:

(1)找到gd32f303-bsp文件,并打开项目。

​​​

 (2)选择options for target-->选择GD32F303RC芯片。

​​​

(3)选择对应的下载器,我这里使用的是jlink ,并选择SWD下载模式。

​​​

(4) 设置Flash Download下载模式。

​​​

(5)那么接下来重点来了,直接下载的代码在GD32F303RCT6是无法运行的,因为GD32F303ZET6的RAM大小为64K,但是GD32F303RCT6的RAM大小为48K。此处需要在board.h头文件中把RAM大小(GD32_SRAM_SIZE)修改为48,如下所示:

​​​

 (6)修改后,重新编译下载,即可通过Debug串口看到打印的log信息。

​​​

三、添加RS485收发线程

1、新建线程并启动

在components.c文件中,找到rt_application_init(void)函数,并添加新建RS485线程的声明。

    rt_thread_t zyxc_rs485_thread;zyxc_rs485_thread=rt_thread_create("rs485", zyxc_rs485_thread_entry, RT_NULL,2048, 27, 20);	//创建485收发线程if(zyxc_rs485_thread!= RT_NULL){rt_thread_startup(zyxc_rs485_thread);rt_kprintf("zyxc_rs485_thread create success!\r\n");}else{rt_kprintf("zyxc_rs485_thread create fail!\r\n");}

​​​

2、添加RS485驱动函数

(1)新建zyxc_rs485.c并添加所需的头文件。

#include <rtthread.h>
#include "zyxc_rs485.h"
#include <gd32f303e_eval.h>
#include "string.h"
#include <stdio.h>

(2)打开zyxc_rs485.c文件,并在其中编写485驱动函数执行语句。如下所示:

char uart1_rx_buf[512] = {0};
int uart1_rx_count = 0;
int uart1_rx_timeout = 0;
int uart1_rx_flag = 0;/*** @brief uart1_init uart1初始化* @param* @return NULL*/
void uart1_init(void)
{/* USART interrupt configuration */nvic_irq_enable(USART1_IRQn, 0, 0);/* configure UART1 */gd_eval_com_init(EVAL_COM2);/* enable USART RBNE interrupt */usart_interrupt_enable(USART1, USART_INT_RBNE);
}
/********************************************
*函数名称:void  gd_eval_en_init (void)
*函数功能:485使能脚处理
*备注:
********************************************/
void  gd_eval_en_init (void)
{/* enable the led clock */rcu_periph_clock_enable(RCU_GPIOA);/* configure led GPIO port */gpio_init(GPIOA, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ,GPIO_PIN_1);GPIO_BC(GPIOA) = GPIO_PIN_1;
}
void gd_eval_en_in(void)
{GPIO_BC(GPIOA) = GPIO_PIN_1;
}
void gd_eval_en_out(void)
{GPIO_BOP(GPIOA) = GPIO_PIN_1;
}
/*** @brief uart_putc uart输出* @param send_buf 待输出的数据* @return 成功返回0,失败返回-1*/
int uart_putc(char *send_buf)
{int i = 0;if(send_buf == RT_NULL){rt_kprintf("Err, the send_buf is NULL\n");return -1;}for(i=0; i< strlen(send_buf); i++){gd_eval_en_out();usart_data_transmit(EVAL_COM2, send_buf[i]);while(RESET == usart_flag_get(EVAL_COM2, USART_FLAG_TC));}return 0;
}

(3)新建zyxc_rs485.h头文件并声明调用函数。

#ifndef __ZYXC_RS485_H
#define __ZYXC_RS485_Hextern char uart1_rx_buf[512] ;
extern int uart1_rx_count ;
extern int uart1_rx_timeout ;
extern int uart1_rx_flag ;
void uart1_init(void);
void  gd_eval_en_init (void);
void gd_eval_en_in(void);
void gd_eval_en_out(void);
int uart_putc(char *send_buf);
void USART1_IRQHandler(void);
void zyxc_rs485_thread_entry(void *parameter);
#endif

(4)在components.c文件中包含头文件#include "zyxc_rs485.h"。

3、添加rs485线程执行语句

(1)打开zyxc_rs485.c文件,并在其中添加线程执行语句。

/********************************************
*函数名称:void zyxc_rs485_thread_entry(void *parameter)
*函数功能:485线程
*备注:处理485的收发
********************************************/
void zyxc_rs485_thread_entry(void *parameter)
{int res;char send_buf[1024] = {0};char log_buf[40] = "hello,please input the data...\r\n";uart1_init();gd_eval_en_init();rt_thread_delay(100);uart_putc(log_buf);//软件定时器while(1){rt_thread_delay(1);if((strlen(uart1_rx_buf) != 0) && (uart1_rx_flag == 2))								//如果接收不为空且接收完成{		memset(send_buf, 0, sizeof(send_buf));sprintf(send_buf, "recv data is %s, return data %s \r\n", uart1_rx_buf, uart1_rx_buf);res = uart_putc(send_buf);																				//开始打印接收数据if(res == -1){rt_kprintf("Err, uart_putc is error\r\n");continue;}uart1_rx_flag = 0;																								//打印完成后接收标志置为0memset(uart1_rx_buf, 0, sizeof(uart1_rx_buf));			}gd_eval_en_in();																											//发送完成后RS485置位为接收状态}}

备注:485芯片在收发过程中需要进行EN使能脚的切换,等待接收状态时,使能脚置位为0,发送数据时,使能脚置位为1。

四、配置KEIL软件下载选项

(1)点击“options for target”——Debug——Jlink/J-TRACE cortex(小编这里用到下载器是

GD32 Jlink OB下载器)——settings——选择SW看到右侧有Device Name即下载器找到了对应的GD32F303RCT6芯片。

​​

 (2)选择Flash Download下载模式,这里端子了擦除整片芯片,以及下载程序后自动复位(Reset and run)。

​​

 (3)下载完成后,打开串口助手,通过发送区进行发送后,即可看到485收发数据。

备注:485串口为串口1、系统自带debug串口为串口0,接线时请注意区分。

如下所示:

 

(4) 备注:看到GD32F303RCT6开发板上LED1、LED2、LED3、LED4每隔1S闪烁一次,此功能为额外添加的idle空闲功能,用于提示开发板系统正常工作。

​​


http://www.ppmy.cn/news/344758.html

相关文章

harmonyos2.0能用于电脑上,速来围观:华为鸿蒙操作系统2.0支持的设备清单流出

自2019年开始&#xff0c;华为消费者CEO余承东在发布会中表示鸿蒙系统将搭载华为荣耀等手机设备时&#xff0c;就引来了国内对此的非议。不少网民表示安卓及苹果的IOS系统已经够用&#xff0c;何必再研发自己的操作系统&#xff0c;还有人表示&#xff0c;即便华为研发出来了鸿…

华为鸿蒙2.0安装包,鸿蒙2.0系统官网正式版下载-华为鸿蒙2.0系统官网安装包下载-战地2中文网...

鸿蒙2.0这是华为最新研发的一款内置系统,这款系统的诞生让整个华为乃至整个国家都前进了非常巨大的一步,os系统是独立于安卓和ios之外的系统,内含有华为旗下多重软件应用工具等,真真实实的国产系统,运行流畅度稳定,感兴趣的小伙伴不妨来看看吧。 鸿蒙2.0怎么升级? ① 需…

Bugku 一段Base64 中的一些编码

Bugku 一段Base64 中的一些编码 解题流程第一层显而易见是Base64编码第二层是转义序列的八进制数第三层是转义序列的十六进制数第四层是Unicode编码中的一种表现形式第五层是Unicode的十进制码第六层是Unicode另一种表现形式第七层也是Unicode的第三种表现方式第八层是URL编码P…

华为v3鸿蒙系统_【华为鸿蒙系统下载】华为鸿蒙系统 v3.3.5 官方最新版-趣致软件园...

华为鸿蒙系统是由华为自主研发的一款操作系统&#xff0c;华为鸿蒙系统能够完美兼容各种电脑系统&#xff0c;内置多种安全机制&#xff0c;支持国产CPU和各种软硬件&#xff0c;支持快速连接手机、pc、电视、汽车等各种智能设备&#xff0c;为用户创造了一个安全、简单、易用、…

MAG02 IMU传感器模块替代MPU6050模块介绍

MAG02模块内置TDK高精度6轴IMU(惯性测量单元&#xff09;传感器芯片&#xff0c;通过处理器读取传感器数据&#xff0c;并经过内部复杂运算后通过串口输出加速度&#xff0c;角速度&#xff0c;角度等数据&#xff0c;大大减轻了用户开发难度和工作量。同时精心的 PCB 布局和工…

计算机测色与配色与编程,【关于国产电子计算机测色配色软件研制的探讨】技术论文-南北潮商城...

本文叙述了研制适合我国国情的电子测配色软件过程中解决的技术问题。软件系统总体设计&#xff0c;配色运算原理&#xff0c;数值运算处理&#xff0c;引入染料特性曲线&#xff0c;搡作倌息中文化、数据结构的开放性&#xff0c;数据显示宜观化&#xff0c;影响配色精度因索的…

北斗核心器件100%国产化,已接入大部分智能手机

来源&#xff1a;AI前线 整理 | 冬梅、钰莹 终于&#xff0c;中国在又一个领域达到核心器件 100% 纯国产。 北斗核心器件国产化率 100%&#xff0c; 22nm 芯片进入量产 近日&#xff0c;在 2020 世界 5G 大会主论坛上&#xff0c;北斗卫星导航系统工程总设计师杨长风在会上分享…

2023-6-12-第三式单例模式

&#x1f37f;*★,*:.☆(&#xffe3;▽&#xffe3;)/$:*.★* &#x1f37f; &#x1f4a5;&#x1f4a5;&#x1f4a5;欢迎来到&#x1f91e;汤姆&#x1f91e;的csdn博文&#x1f4a5;&#x1f4a5;&#x1f4a5; &#x1f49f;&#x1f49f;喜欢的朋友可以关注一下&#xf…

保姆级攻略!Elsevier期刊投稿教程,手把手操作建议收藏!

目前所投的期刊绝大多数为Elsevier旗下的期刊&#xff0c;如Acta、JAC、MSEA、JMST等&#xff0c;以JAC为例。以下分享逐步投稿操作流程&#xff1a;&#xff08;以一本Elsevier旗下期刊为例&#xff09; 0. 进入期刊投稿主页&#xff0c;一般打开期刊主页&#xff0c;点击【S…

超级实用!Python 3.6帮您提升编码效率的一个新的小特性 ——f{}

Python3.6 格式化字符串的新用法 在python 3.6格式化字符串时&#xff0c;增加了一个非常实用的新特性&#xff0c;文本以“f”或者“F”为前缀加上{}&#xff0c;可以实现类似于%和str.format的功能&#xff0c;但与他们相比更加易读和不易不错。使用也非常方便&#xff0c;以…

O光 E光 双折射现象

一束光进入晶体得到两束折射光&#xff0c;一束为寻常光(Ordinary Rays, O光)&#xff0c;另一束为非常光(Extraordinary Rays, E光)。这种现象称为双折射。 上面的图片中是一块方解石&#xff0c;透过方解石看后面的文字&#xff0c;发现有重影。这就说明了光线有两条传播途径…

锥透镜生成贝塞尔光束ZEMAX光学设计

光源&#xff0c;1064nm,高斯光&#xff0c;9mm直径 锥透镜&#xff1a;THORLABS&#xff0c;AX255-C&#xff08;官网有zemax文件&#xff09; Zmax1取边缘光线追迹位置&#xff1a;133.717 L1取f1100mm&#xff0c;使用Edmund官网#45274平凸透镜&#xff08;官网有zemax文…

【光学】(一) 光阑、光瞳

基础概念 主光线&#xff1a;以一定角度入射的光线中&#xff0c;通过入瞳中央射到像平面的那一条光线&#xff1b;各光以自己相应的那条光线为主光线计算误差。孔径光阑&#xff1a;限制轴上物点孔径角u的大小&#xff0c;或者说限制轴上物点成像光束宽度、并有选择轴外物点成…

结构光照明的显微镜系统

摘要 与阿贝理论预测的分辨率相比&#xff0c;用于荧光样品的结构照明显微镜系统可以将显微镜系统的分辨率提高2倍。 VirutualLab Fusion提供了一种通过入射波属性来研究结构化照明模式的快速方法。 本案例研究了入射波的偏振及其对结构化照明图案对比度的影响。 场景 在Virt…

Zemax非序列中分光镜的设计方法

分光镜有各种类型&#xff0c;在使用时&#xff0c;主要的因素包括 入射角、偏振态和波长&#xff0c;实现将入射光分为反射光和透射光。在非序列中的实现&#xff0c;主要通过设计分光板的膜层参数来实现分光作用&#xff0c;当然&#xff0c;与此类似的还可以设计结构和膜层实…

双光子荧光成像_双光子荧光显微镜

【技术特点】-- 双光子荧光显微镜 MitochondriaHela cellshuman skinBiopsie of LungSHG & Red in ZebrafishImage in Lung Slice 第二代双光子显微镜 : LaVision BioTeczei新的双光子显微镜-第二代双光子显微镜TriM Scope II具有一些新的特点&#xff1a;TriM Scope II双光…

光阑,像差和成像光学仪器

人眼 人眼成像过程 空气-角膜 水状液-晶状体 晶状体-玻璃体 三个界面的折射成像 瞳孔 2-8mm 可变光阑,调节入射光强弱 睫状肌 改变晶状体曲率---调焦 人眼的调节 远点—眼睛完全松弛状态下看清楚的最远点&#xff0c;正常眼的远点在无穷远 近点—睫状肌最大收缩(焦…

ZEMAX多重结构分光镜模拟

1 Entrance Pupil Diameter设置为20mm 2 Lens Data Editor设置为反光板&#xff0c;材料可设为BK7 3设置为反光镜倾斜45度 双击表面2&#xff0c;Suface Type选择Titled。并同步设置表面3。 表面2和3的Y Tangent设置为1(表示tan451)&#xff0c;Suface Type选择Titled。并同步…

显微镜基本知识【1】

显微镜发展史 1846年&#xff0c;卡尔蔡司先生在耶拿市Neugasse街7号开设一间制造精密光学仪器的小作坊。 1866年&#xff0c;销售第1000台显微镜。ErnstAbbe先生加入蔡司先生企业&#xff0c;使蔡司公司显微镜技术建立在科学基础之上。 1884年至1891年&#xff1a;耶拿“Sc…

基于共聚焦显微技术的显微镜和荧光显微镜的区别

荧光显微镜主要应用在生物领域及医学研究中&#xff0c;能得到细胞或组织内部微细结构的荧光图像&#xff0c;在亚细胞水平上观察诸如Ca2 、PH值&#xff0c;膜电位等生理信号及细胞形态的变化&#xff0c;是形态学&#xff0c;分子生物学&#xff0c;神经科学&#xff0c;药理…