小熊派gd32f303学习之旅(3)—串口打印第一个Hello world程序

一、硬件连接

通过查看原理图我们可以看到,当【UART通信选择开关】拨向【AT-MCU】时,USB虚拟串口连接到MCU的UART0,我们只需要将开关拨到【AT-MCU】。

二、编写USART驱动程序

Hardware文件夹下新建uart.c文件并添加到工程中,在include文件夹下新建uart.h文件。
编写uart.h文件,定义一个串口1初始化函数:

#ifndef __USART_H
#define __USART_H#include <stdio.h>
#include "gd32f30x.h"/* 串口0初始化,参数为波特率 */
void uart0_init(uint32_t bound);#endif

然后我们在usart.c中实现串口初始化函数

/* USART0串口初始化函数* 参数:波特率* 返回值:无    */
void uart0_init(uint32_t bound)
{   /* 使能 GPIOA 时钟 */rcu_periph_clock_enable(RCU_GPIOA);/* 使能 USART0 时钟 */rcu_periph_clock_enable(RCU_USART0);/* PA9  复用为 USART0_Tx */gpio_init(GPIOA, GPIO_MODE_AF_PP, GPIO_OSPEED_50MHZ,GPIO_PIN_9);/* PA10 复用为 USARTx_Rx */gpio_init(GPIOA, GPIO_MODE_IN_FLOATING, GPIO_OSPEED_50MHZ,GPIO_PIN_10);/* USART0 初始化配置 */usart_deinit(USART0);usart_baudrate_set(USART0, bound);                      /* 设置波特率 */usart_receive_config(USART0, USART_RECEIVE_DISABLE); /* 禁止接收 */usart_transmit_config(USART0, USART_TRANSMIT_ENABLE); /* 使能发送 */  usart_enable(USART0);
}

接下来将C库的printf函数重定向到USART0

/* 加入以下代码,支持printf函数,而不需要选择use MicroLIB  */
#if 1
#pragma import(__use_no_semihosting)
/* 标准库需要的支持函数 */
struct __FILE
{ int handle; }; FILE __stdout;
/* 定义_sys_exit()以避免使用半主机模式  */
void _sys_exit(int x)
{ x = x;
}
/* 重定义fputc函数 */
int fputc(int ch, FILE *f)
{   while (RESET == usart_flag_get(USART0, USART_FLAG_TBE));  usart_data_transmit(USART0, (uint8_t)ch);return ch;
}
#endif

这样usart.c就编写好了

三、打印Hello world!

接下来我们在main.c中添加usart.h头文件包含,然后初始化USART0,每隔两秒中打印一次Hello world!,

#include "gd32f30x.h"
#include "systick.h"
#include "usart.h"int main(void)
{/* 配置系统时钟 */systick_config();/* 初始化LED */led_init();/* 初始化USART0 */uart0_init(115200);while(1){/* 通过串口打印 Hello world! */printf("Hello world! \r\n");/* turn on LED */LED(1);delay_1ms(1000);/* turn off LED */LED(0);delay_1ms(1000);}
}

另外,我们需要注意的时,要把usart的固件库文件添加进来:

接下来编译,烧录到开发板,在串口调试助手可以看到,成功打印Hello world!

四、附录

完整代码我存放在码云,可以查看:https://gitee.com/william_william/BearPi-GD32F303RGT6.git
上一篇:小熊派gd32f303学习之旅(2)—新建工程点亮第一个LED灯
下一篇:小熊派gd32f303学习之旅(4)—使用DMA实现串口打印

小熊派gd32f303学习之旅(3)—串口打印第一个Hello world程序相关推荐

  1. 小熊派gd32f303学习之旅(4)—使用DMA实现串口打印

    小熊派gd32f303学习之旅(4)-使用DMA实现串口打印 一.前言 在上一篇文章(串口打印第一个Hello world程序)我们使用重定义fputc函数的方式实现了串口打印,但是这种方式本质上是在 ...

  2. 小熊派gd32f303学习之旅(7)—使用PWM实现LED呼吸灯

    小熊派gd32f303学习之旅(7)-使用PWM实现LED呼吸灯 一.前言 通过查看gd32f30x的参考手册,可以知道gd32f303的通用定时器和高级定时器可以硬件生成PWM波,然后我们查看gd3 ...

  3. STM32学习之旅④ USART串口和上位机通信

    STM32系列博客: STM32学习之旅① 开发环境搭建 STM32学习之旅② 固件库的使用及工程模板的建立 STM32学习之旅③ 从点灯到代码移植 STM32学习之旅④ USART串口和上位机通信 ...

  4. 小豆包的学习之旅:里程计运动模型

    星球大战里面有2个非常出色的机器人一个是3PO,一个是R2.我的机器人呢就叫小豆包啦,代号FR2,不许侵犯它的署名哦. 常见的机器人运动模型包括:速度计运动模型,里程计运动模型和惯导运动模型.概率运动 ...

  5. python打字效果_Python学习之旅:用Python制作一个打字训练小工具

    一.写在前面 说道程序员,你会想到什么呢?有人认为程序员象征着高薪,有人认为程序员都是死肥宅,还有人想到的则是996和 ICU. Python资源共享群:626017123 别人眼中的程序员:飞快的敲 ...

  6. Python学习之旅:用Python制作一个打字训练小工具

    一.写在前面 说道程序员,你会想到什么呢?有人认为程序员象征着高薪,有人认为程序员都是死肥宅,还有人想到的则是996和 ICU. 别人眼中的程序员:飞快的敲击键盘.酷炫的切换屏幕.各种看不懂的字符代码 ...

  7. STM32CubeMX学习之旅1:点亮一个LED灯

    本学习采用"STM32CubeMX + MDK-ARM"的开发工具组,内部利用ST主推的HAL(Hardware Abstraction Layer,硬件抽象层)库,对新大陆的M3 ...

  8. 《Go语言从入门到实战》学习笔记(2)——编写第一个Go语言程序

    本节内容主要侧重于环境构建以及经典代码的编写. 一.开发环境构建 GOPATH在1.8版本之前设置这个环境变量 1.8版本后(含1.8)如果没有设置使用默认值,在Unix上默认为$HOME/go,在W ...

  9. RT-ThreadBearPi 开发笔记 -- 小熊派基于RT-Thread使用ESP8266进行网络连接

    小熊派基于RT-Thread使用ESP8266进行网络连接 物联网的概念和应用场景,最关键最必不可少的一个环节,就是联网.可以说,如果没有可靠的网络连接功能,那这个设备还不算是一个合格的物联网设备. ...

最新文章

  1. BCH两周年独立日已至,世界各地爱好者纷纷举办Meetup庆祝
  2. java 打印map后的输出
  3. linux cp 强制yes,linux cp实现强制覆盖
  4. Vue项目中遇到了大文件分片上传的问题
  5. TensorFlow基础(1)-中使用多个 Graph
  6. NET牛人应该知道些什么
  7. 如何彻底解决烦人的 MySQL 分库分表问题?写一个更好的数据库!
  8. 2.Kong入门与实战 基于Nginx和OpenResty的云原生微服务网关 --- Kong 的安装和基本概念
  9. centos7.5 mysql5.6_Centos7下完美安装并配置mysql5.6
  10. python牛顿迭代法求平方根_Python编程如何实现二分法及牛顿迭代法求平方根代码...
  11. C语言运算优先级记忆口诀
  12. 小白教程:Python爬取12306车票信息以及后期数据处理
  13. 金鳞岂是池中物IT评论博客正式成立
  14. 【DB宝36】使用Docker分分钟搭建漂亮的prometheus+grafana监控
  15. Elite教程系列(一):快速上手
  16. 每页多张幻灯片密集打印的设置技巧
  17. 车载应用--AUXIN 利用 surfaceView 预览 Camera 数据
  18. 个人项目(二)-- 自助点餐系统
  19. 二极管质量好坏判断方法,轻松学会-通程创品
  20. 机器视觉毕业设计 Python图像拼接算法研究与实现 - opencv

热门文章

  1. 互联网注定被抛弃,未来30年属于硬科技!深层逻辑是这样的
  2. 洛谷P5322 [BJOI2019]排兵布阵【分组背包】
  3. ds18b20温度报警C语言程序,单片机中使用DS18B20温度传感器C语言程序(参考4)
  4. edger多组差异性分析_用R实现批量差异分析(t检验和方差分析),自己算P值
  5. 二级路由dhcp关闭连不上wifi_如何解决家里Wifi能连接,但上不去网怎么办?
  6. 华三(H3C)单臂路由
  7. wildcard 的理解
  8. 【基础】603- 深入分析Session和Cookie
  9. StringPool详解
  10. 您选择的不是数据库安装目录_您不是您的数据,但您的数据仍然是您