3184|1

379

帖子

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
点赞 关注
 

回复
举报

7671

帖子

2

TA的资源

五彩晶圆(高级)

沙发
 

这个rs232有点年头了。

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

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

 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

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

 
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
快速回复 返回顶部 返回列表