【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)
|