3157|1

374

帖子

3

TA的资源

一粒金砂(高级)

楼主
 

GD32L233C-START 评测 (2)LPUART串口终端 [复制链接]

本帖最后由 wenyangzeng 于 2022-2-17 15:57 编辑

【GD32L233C-START 评测 】(2)LPUART串口终端

 

       针对的GD32L233C-START的评测,如果仍然使用非低功耗的那些演示DEMO,就失去了GD32L233C最突出的优势了。

      所以笔者对GD32L233C的评测从一开始就定位在低功耗方面。刚开始考虑连接笔段式LCD模块来显示数据。但发现只有64PIN的芯片才支持笔段式LCD驱动。而外接OLED等显示设备又不太符合低功耗的要求。故改成利用GD32L233C-START的LPUART功能建立一个低功耗串口通讯终端,用于整个评测过程中对开发板的各种低功耗运行的控制和显示。虽然GD32L233C-START的CN1就能够通过USB转USART实现与PC机的串口通讯。但 使用LPUART方式能更直观地评测GD32L233C的低功耗特性。


   GD32L233C-START的PA2和PA3是LPUART-TX和LPUART-RX引脚。连接方式见下图:


   

 

  串口通讯波特率115200、8位数据位、1位停止位、无奇偶校验、不定长中断方式进行接收。设定当LPUART接收到1帧完整数据后,GD32L233C将该帧数据以从尾到头反方向发送回PC终端。

    使用不定长接收方式可以适应各种不同长度数据接收处理

 


代码:

#include "gd32l23x.h"
#include <stdio.h>
#include "gd32l233r_eval.h"

#define LPUART_RDATA_ADDRESS ((uint32_t)&LPUART_RDATA)

uint8_t rxbuffer[256];
uint8_t tx_count = 0;
__IO uint8_t rx_count = 0;
__IO uint8_t receive_flag = 0;

void lpuart_config(void);
void nvic_config(void);

int main(void)
{
    gd_eval_led_init(LED1);
    
    nvic_config();
    lpuart_config();

    while(RESET == lpuart_flag_get(LPUART_FLAG_IDLE));
	
    lpuart_flag_clear(LPUART_FLAG_IDLE);
    lpuart_interrupt_enable(LPUART_INT_IDLE);
    lpuart_interrupt_enable(LPUART_INT_RBNE);
	
    while(1) {
        if(1 == receive_flag) {
			gd_eval_led_on(LED1);

         for(tx_count = rx_count; tx_count>0; tx_count--) {
             while(RESET == lpuart_flag_get(LPUART_FLAG_TBE));
             lpuart_data_transmit(rxbuffer[tx_count]);
            }
			rx_count=0;
            receive_flag = 0;
			gd_eval_led_off(LED1);
        }
    }
}

void lpuart_config(void)
{
    rcu_periph_clock_enable(RCU_GPIOA);
    rcu_periph_clock_enable(RCU_LPUART);
    gpio_af_set(GPIOA, GPIO_AF_8, GPIO_PIN_2);
    gpio_af_set(GPIOA, GPIO_AF_8, GPIO_PIN_3);
    gpio_mode_set(GPIOA, GPIO_MODE_AF, GPIO_PUPD_PULLUP, GPIO_PIN_2);
    gpio_output_options_set(GPIOA, GPIO_OTYPE_PP, GPIO_OSPEED_10MHZ, GPIO_PIN_2);
    gpio_mode_set(GPIOA, GPIO_MODE_AF, GPIO_PUPD_PULLUP, GPIO_PIN_3);
    gpio_output_options_set(GPIOA, GPIO_OTYPE_PP, GPIO_OSPEED_10MHZ, GPIO_PIN_3);

    lpuart_deinit();
	lpuart_word_length_set(LPUART_WL_8BIT);
    lpuart_stop_bit_set(LPUART_STB_1BIT);
    lpuart_parity_config(LPUART_PM_NONE);
    lpuart_baudrate_set(115200U);
    lpuart_receive_config(LPUART_RECEIVE_ENABLE);
    lpuart_transmit_config(LPUART_TRANSMIT_ENABLE);
    lpuart_enable();
}

void nvic_config(void)
{
    nvic_irq_enable(LPUART_IRQn, 0);
}

void LPUART_IRQHandler(void)
{
    if(RESET != lpuart_interrupt_flag_get(LPUART_INT_FLAG_IDLE)){
        lpuart_interrupt_flag_clear(LPUART_INT_FLAG_IDLE);
        gd_eval_led_toggle(LED1);
        receive_flag = 1;
    }
		else
		    if(RESET != lpuart_interrupt_flag_get(LPUART_INT_FLAG_RBNE))
					{
					rxbuffer[rx_count++] = lpuart_data_receive();
					}
}

 

调试过程中发现了gd32l233r_eval.h中对LED1和LED2的定义是错误的,导致LED1和LED2无法点亮:

 

#define LED1_PIN                   GPIO_PIN_7
#define LED1_GPIO_PORT             GPIOC
#define LED1_GPIO_CLK              RCU_GPIOA

#define LED2_PIN                   GPIO_PIN_8
#define LED2_GPIO_PORT             GPIOC
#define LED2_GPIO_CLK              RCU_GPIOA


其中GPIOC是错的,应该改为GPIOA


 

此帖出自GD32 MCU论坛

最新回复

这个rs232有点年头了。   详情 回复 发表于 2022-2-16 23:04
点赞 关注
 

回复
举报

7608

帖子

2

TA的资源

五彩晶圆(高级)

沙发
 

这个rs232有点年头了。

此帖出自GD32 MCU论坛
 
个人签名

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

 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
推荐帖子
ARM 系列内核介绍

ARM 系列内核介绍

电子竞赛中的30m的频率通讯电路图出来了

本帖最后由 paulhyde 于 2014-9-15 09:41 编辑 我们要使用的芯片是:ET13X211作为接收 ET13X221作为发送,电路如图所示 26665 ...

用SPI Flash IC做字库的方法(不提供源代码)

在很多应用中我们都需要使用到字库,常见的方法有: 1. 把字库放入SD卡中。需要带SD卡,需要使用文件系统,软硬件成本比较高 ...

有关GD32F450的以太网半双工调试经历

估计说起以太网半双工,很多人快遗忘了,说了你不信,我们最近用起了以太网半双工,说到底为了节省成本,由于通讯机制简单, ...

那个想请教一些稳压二极管的知识

这个反激式开关电源输出端(14V,0.82A),因为没有反馈环路我想加一个稳压二极管,我选择的安森美的MMSZ15T1G,就是想请教一下, ...

TMS320C6747定点/浮点数字信号处理器

本帖最后由 Jacktang 于 2020-5-4 08:35 编辑 数据表 TMS320C6745, TMS320C6747 Fixed- and Floating-Point D ...

电子电路分析

513431 请问大佬该电路中的R1、R2和C4的作用是什么,它的取值是怎么选定的

线里面干扰 如何隔离

587693 单片机串口和驱动模块放在同根线里面然后负载工作会烧掉单片机 ,请问这个串口要做个怎样的通讯方式最好呢?

刚禁言了一个 复制他人回复,跟帖灌水的网友

开始没想禁言,发了一次,删除登记违规了。 然后又连续发现2次了,直接禁言1个月。 ——一只暴躁的管仔工作日志~ ...

关闭
站长推荐上一条 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
快速回复 返回顶部 返回列表