RISC-V MCU中文社区

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

发表于 GD32VF103 MCU 2021-03-27 10:56:56
0
4077
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

程序:

  1. void USART2_IRQHandler(void){
  2. if(usart_interrupt_flag_get(USART2, USART_INT_FLAG_RBNE) != RESET){
  3. uint8_t serial_recv = usart_data_receive(USART2);
  4. printf("%d",serial_recv);
  5. }
  6. }
  7. int main(void)
  8. {
  9. printf("Hello World\r\n");
  10. rcu_periph_clock_enable(RCU_GPIOB); //enable GPIO clock, PB10/PB11
  11. rcu_periph_clock_enable(RCU_USART2); //enable USART clock
  12. gpio_init(GPIOB, GPIO_MODE_AF_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_10); //PB10--TX2
  13. gpio_init(GPIOB, GPIO_MODE_IN_FLOATING, GPIO_OSPEED_50MHZ, GPIO_PIN_11); //PB11--RX2
  14. usart_deinit(USART2);
  15. usart_baudrate_set(USART2,9600U); // 9600
  16. usart_word_length_set(USART2,8); // 8
  17. usart_parity_config(USART2,USART_PM_NONE); //N
  18. usart_stop_bit_set(USART2,1);// 1
  19. usart_receive_config(USART2, USART_RECEIVE_ENABLE); // 使能串口接收
  20. usart_transmit_config(USART2, USART_TRANSMIT_ENABLE); // 是能串口发送
  21. usart_interrupt_enable(USART2,USART_INT_RBNE); //使能接收中断
  22. ECLIC_Register_IRQ(USART2_IRQn,ECLIC_NON_VECTOR_INTERRUPT,ECLIC_LEVEL_TRIGGER,1,0,USART2_IRQHandler); // 配置中断函数
  23. __enable_irq();
  24. usart_enable(USART2);
  25. for (int i = 1; i <= 20; i ++) {
  26. usart_data_transmit(USART2,i);
  27. while ( usart_flag_get(USART2, USART_FLAG_TBE)== RESET){}; // 等待发送完成
  28. }
  29. delay_1ms(200);
  30. printf("\r\n FINISH\r\n");
  31. return 0;
  32. }


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

吐槽

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 开发板