GD32串口配置

一、gpio 配置

1、按键:上拉输入

2、点亮灯泡:不上不下,推挽输出

PB13、PB14对应按键
PC13、PC14对应灯泡,低电平点亮。

 //使能时钟
    rcu_periph_clock_enable(RCU_GPIOC);
    //使能时钟
    rcu_periph_clock_enable(RCU_GPIOB);
    
    //设置输出模式,不上下拉
    gpio_mode_set(GPIOC, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO_PIN_14);
    gpio_mode_set(GPIOC, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO_PIN_15);
    //设置输出模式,上拉
    gpio_mode_set(GPIOB, GPIO_MODE_INPUT, GPIO_PUPD_PULLUP, GPIO_PIN_13|GPIO_PIN_14|GPIO_PIN_15);
    
    //设置输出类型,推挽输出,50Mhz
    gpio_output_options_set(GPIOC, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_14);
    gpio_output_options_set(GPIOC, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_15);

3、代码说明

按下KEY1,板载LED灯点亮,按下KEY2,板载LED灯熄灭。

此处项目源码中,有一个小细节,当我们检测按键是低电平时,开始延迟10ms进行消抖,随后再次判断,如果还是低电平,那就确定是按键按下,但还会有另外一个问题出现,如果我们一直按着按键,那就会一直是低电平,就会造成反复判断。
所以,加入一个死循环,如果按键一直按下,就一直循环,当按下松手的时候,才算一次完整的按键按下。

二、串口通信

1、 串口通信参数介绍

  • 波特率: 衡量通信速度的参数,它表示每秒钟传送的bit的个数。
  • 数据位: 衡量通信中实际数据位的参数,表示一个信息包里包含的数据位的个数。
  • 停止位: 用于表示单个信息包的最后位,典型值为1、1.5和2位。由于数据是在传输线上传输的,每个设备都有自己的时钟,很有可能在通信过程中出现不同步,停止位不仅仅表示传输的结束,还能提供校正时钟同步的机会。停止位的位数越多,不同时钟同步的容忍程度越大,但是数据传输率也越慢。
  • 奇偶检验位: 表示一种简单的检查错误的方式。

2、串口工作模式

串口可以工作在单工、半双工和全双工模式下。

  • 单工:在通信的任意时刻,信息只能由A传到B。
  • 半双工:在通信的任意时刻,信息即可由A传到B,又能由B传到A,但同时只能有一个方向上的传输存在。
  • 全双工:在通信的任意时刻,通信线路上存在A到B和B到A的双向信号传输。

3、串口通信协议

串口在进行通信的时候会按照数据包的形式进行发送,帧格式如下所示。
在这里插入图片描述
串口通信是一位一位地传输,每传输一个字符总是以起始位开始,以停止位结束,字符之间没有固定的时间间隔要求。每一个字符的前面都有一位起始位(低电平),后面由7位数据位组成,接着是一位校验位,最后是停止位。停止位后面是不定长的空闲位,停止位和空闲位都规定为高电平。

4、串口接口原理图

在开发板上默认使用的串口是串口0,有两根数据线,也就是USART0_TX和USART0_RX。串口引脚和下载引脚连接在Type-C,插上Type-C就可以进行串口调试。关于串口原理图如下所示。
在这里插入图片描述
GPIO引脚默认是作为普通IO使用,当需要使用外设功能时,需要打开对应的复用模式。

//使能时钟
rcu_periph_clock_enable(RCU_GPIOA);
rcu_periph_clock_enable(RCU_USART0);

//复用功能设置
gpio_af_set(GPIOA, GPIO_AF_1, GPIO_PIN_9);
gpio_af_set(GPIOA, GPIO_AF_1, GPIO_PIN_10);

//端口模式设置,tx可以使用推挽输出
gpio_mode_set(GPIOA, GPIO_MODE_AF, GPIO_PUPD_PULLUP, GPIO_PIN_9);
//端口模式设置
gpio_mode_set(GPIOA, GPIO_MODE_AF, GPIO_PUPD_PULLUP, GPIO_PIN_10);


usart_word_length_set(USART0, USART_WL_8BIT);               //8位数据位宽
usart_stop_bit_set(USART0, USART_STB_1BIT);                 //1位停止位
usart_parity_config(USART0, USART_PM_NONE);                 //无校验位
usart_baudrate_set(USART0, bound);                          //波特率
usart_transmit_config(USART0, USART_TRANSMIT_ENABLE);        //发送使能
//使能串口0
usart_enable(USART0)

5、串口发送数据

配置好串口参数后,下一步操作就是要发送数据。
发送数据的流程分三步走:
第一步:调用串口发送函数;
第二步:等待串口发送完成;
第三步:清除串口发送标志位;

void USART0_SendData(char sendData)
{
    //串口发送函数,发送一个字节数据
    usart_data_transmit(USART0, (uint8_t)sendData);
    //等待串口发送完成
    while(RESET == usart_flag_get(USART0, USART_FLAG_TBE));
    //清除串口发送标志位
    usart_flag_clear(USART0,USART_FLAG_TC);
}

三级标题

四级标题
五级标题
六级标题
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一枚嵌入式学习同学

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值