2935|0

821

帖子

0

TA的资源

一粒金砂(高级)

楼主
 

【GD32L233C-START评测】四、USART [复制链接]

      本次实验利用串口软件通过USART向GD32L233C-START发送指令字用以控制板载LED的工作状态。

一、实验资源

1、GD32L233C-START;

2、Keil V5.36.0.0;

3、USR-TCP232-Test-V1.3

 

二、知识准备

        GD32L233CCT6为用户提供了USART0、USART1两个通用同步、异步收发器(universal synchronous asynchronous receiver and transmitter);同时还有UART3、UART4两个通用异步收发器(universal asynchronous receiver and transmitter)。两者的区别在于“USART”支持同步、异步收发,而“UART”只支持异步收发。

通过上面描述可以看到这两者的区别,同时也说明“USART”在应用范围上更加广泛。而本次实验使用的是“USART”。

 

三、实验内容

1、硬件资源

        通过GD32L233C-START原理图可以看到,开发板上专门设置了一个MINI USB口用于与PC进行连接,同时CH340E也解决了电平及信号的转换,便于实验。CH340E连接至GD32L233CCT6的PA9及PA10端口;

2、程序实现

        通过硬件分析可以确定本次实验使用了GD32L233CCT6的“USART0”通信接口,并同时使用了USART0的数据发送及接收,其对应于PA9(USART0_TX)及PA10(USART0_RX)端口。

在USART通信过程中还有一个比较重要的“波特率”参数:

对于USART配置时还有一个需要特别注意的就是启用端口的备用功能。如本例:

下面就是本例中USART0的相关配置:

void USART_Config(void)
{
	rcu_periph_clock_enable(RCU_GPIOA);		//使能GPIOA时钟
	rcu_periph_clock_enable(RCU_USART0);	//使能USART0时钟

	gpio_af_set(GPIOA, GPIO_AF_7, GPIO_PIN_9);//启用PA9端口USART0_TX功能
	gpio_af_set(GPIOA, GPIO_AF_7, GPIO_PIN_10);//启用PA10端口USART0_RX功能

	gpio_mode_set(GPIOA, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO_PIN_9);
	gpio_output_options_set(GPIOA, GPIO_OTYPE_PP, GPIO_OSPEED_10MHZ, GPIO_PIN_9);//推挽输出

	gpio_mode_set(GPIOA, GPIO_MODE_INPUT, GPIO_PUPD_PULLUP, GPIO_PIN_10);//使能上拉
	gpio_output_options_set(GPIOA, GPIO_OTYPE_OD, GPIO_OSPEED_10MHZ, GPIO_PIN_10);

	usart_deinit(USART0);//8,1,N; 波特率=115200; 
	usart_word_length_set(USART0, USART_WL_8BIT);
	usart_stop_bit_set(USART0, USART_STB_1BIT);
	usart_parity_config(USART0, USART_PM_NONE);
	usart_baudrate_set(USART0, 115200U);
	usart_receive_config(USART0, USART_RECEIVE_ENABLE);//接收使能
	usart_transmit_config(USART0, USART_TRANSMIT_ENABLE);//发送使能

	usart_enable(USART0);
}

重定向:

int fputc(int ch, FILE *f)
{
	usart_data_transmit(USART0, (uint8_t) ch);
	while(RESET == usart_flag_get(USART0, USART_FLAG_TBE));
	return ch;
}

int fgetc(FILE * f)
{
	uint8_t ch = 0;
	
  while(RESET == usart_flag_get(USART0, USART_FLAG_RBNE));
	ch = usart_data_receive(USART0);
  return ch;
}

主函数中循环检测由PC串口软件发送来的指令控制对应LED的状态翻转:

int main(void)
{
	uint8_t ch;
	
	systick_config();
	USART_Config();
	LED_Config();
	printf("\r\nGD32L233C_START USART0 TEST");
  printf("\r\n利用串口助手通过USART0控制LED亮、灭");
  printf("\r\n配置参数为 115200 8-N-1 \n");
  printf("1 -> LED1翻转 \r");
  printf("2 -> LED2翻转 \r");
  printf("3 -> LED3翻转 \r");
  printf("4 -> LED4翻转 \r \n");

	while(1) 
	{
		ch = getchar();
		printf("接收到字符:%c \n", ch);

    switch(ch)
    {
      case '1':
        gpio_bit_toggle(LED1_PORT, LED1_PIN); //LED1翻转
      break;
      case '2':
        gpio_bit_toggle(LED2_PORT, LED2_PIN); //LED2翻转
      break;
      case '3':
        gpio_bit_toggle(LED3_PORT, LED3_PIN); //LED3翻转
      break;
      case '4':
        gpio_bit_toggle(LED4_PORT, LED4_PIN); //LED4翻转
      break;

      default:
				printf("1 -> LED1翻转 \n");
				printf("2 -> LED2翻转 \n");
				printf("3 -> LED3翻转 \n");
				printf("4 -> LED4翻转 \n \n");
      break;
    }
//		printf("USART0 test is OK!\n\r");
//		delay_1ms(1000);
	}
}

 

四、实验成果

五:附件

USART.rar (346.05 KB, 下载次数: 10)

此帖出自GD32 MCU论坛
点赞 关注
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

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