RISC-V MCU中文社区

【分享】 GD32VF103串口收发实验(中断方式)

发表于 GD32VF103 MCU 2021-03-27 10:56:56
0
2676
4

前言

串口作为单片机上最常用的外设,在开发调试及与其他设备通讯中扮演了重要角色。在参考了众多前人方案后,最终决定自己写一个小demo。由于手里的调试器不断报错,新买的调试器还有好久才能到,只好先放出demo来。

硬件准备

Sipeed Longan Nano × 1

RV Debugger × 1

跳线帽 × 1

开发环境

Nuclei Studio

工程模板

Baremetal_helloworld

开始干活

由于USART0一般都作为调试用或者与上位机通讯用的串口,在与外部设备通讯时使用该串口并不方便。查阅文档后决定使用USART2作为与其他设备通讯的工作串口,该串口被映射到了PB10(TX),PB11(RX),且5V容忍,适用范围比USART1稍微广一些。

程序实现在main函数中通过串口2发送数字1~20,同时通过串口2接收发来的数据并通过串口0打印出来。

硬件连接:跳线帽短接PB10,PB11

程序:

void USART2_IRQHandler(void){
	if(usart_interrupt_flag_get(USART2, USART_INT_FLAG_RBNE) != RESET){
		uint8_t serial_recv = usart_data_receive(USART2);
		printf("%d",serial_recv);
	}
}

int main(void)
{
    printf("Hello World\r\n");

    rcu_periph_clock_enable(RCU_GPIOB);	//enable GPIO clock, PB10/PB11
    rcu_periph_clock_enable(RCU_USART2);	//enable USART clock
    gpio_init(GPIOB, GPIO_MODE_AF_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_10);	//PB10--TX2
    gpio_init(GPIOB, GPIO_MODE_IN_FLOATING, GPIO_OSPEED_50MHZ, GPIO_PIN_11);	//PB11--RX2

    usart_deinit(USART2);
    usart_baudrate_set(USART2,9600U); // 9600
    usart_word_length_set(USART2,8); // 8
    usart_parity_config(USART2,USART_PM_NONE); //N
    usart_stop_bit_set(USART2,1);// 1

    usart_receive_config(USART2, USART_RECEIVE_ENABLE); // 使能串口接收
    usart_transmit_config(USART2, USART_TRANSMIT_ENABLE); // 是能串口发送

    usart_interrupt_enable(USART2,USART_INT_RBNE); //使能接收中断
    ECLIC_Register_IRQ(USART2_IRQn,ECLIC_NON_VECTOR_INTERRUPT,ECLIC_LEVEL_TRIGGER,1,0,USART2_IRQHandler); // 配置中断函数
    __enable_irq();

    usart_enable(USART2);
    for (int i = 1; i <= 20; i ++) {
	usart_data_transmit(USART2,i);
	while ( usart_flag_get(USART2, USART_FLAG_TBE)== RESET){}; // 等待发送完成
    }

    delay_1ms(200);
    printf("\r\n FINISH\r\n");

    return 0;
}


以上代码只能说是将就着能跑,距离能实际使用还有很大差距

吐槽

Sipeed Longan Nano + RV Debugger 使用起来真的心惊胆战,带电插拔一下跳线帽,或者碰一下电源线,接下来就是无尽的

Error: Unsupported DTM version: 12
Info : Listening on port 3333 for gdb connections
Error: Target not examined yet

本来打算把demo完善后再发出来,但是由于跟调试器搏斗了一天了还没有找到问题根源,严重影响进度,只能先发半成品出来,等新买的调试器回来了再完善


喜欢4
用户评论
Flagplus

Flagplus 实名认证

懒的都不写签名

积分
问答
粉丝
关注
  • RV-STAR 开发板
  • RISC-V处理器设计系列课程
  • 培养RISC-V大学土壤 共建RISC-V教育生态
RV-STAR 开发板