1531|3

7

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

实例验证及串工打印 [复制链接]

  1. 下面把官方提供的实例验证一下,由于实例功能都是单一的,下载程序,一一验证,点灯,按键功能,串口发送接收都有实现,这里不一一叙述。虚拟USB功能,设备驱动安装失败,无法连接验证。有哪位大神知道哪里有驱动更新?windows自动搜索没有。

 

  1. 接下来在官方提供GD32L23x_Firmware_Library_V1.0.1Examples,尝试一下串口打印功能,可以打印一些调试信息。
  1. 根据提供的Examples,这里选择DMA方式发送和接收。

 

  1. 打开一个项目,移植USARTDMA部分,tx选择DMA_CH0tx初始化部分如下:
  1. dma_channel_enum dma_channel_tx; 
  2. /*! 
  3.     \brief      initialize the dma_USART_tx configuration of the com 
  4.     \param[in]  none 
  5.     \param[out] none 
  6.     \retval     none 
  7. */  
  8. void dma_usart_tx_deinit(void)  
  9. {  
  10.     dma_parameter_struct dma_init_struct;  
  11.     /* enable DMA clock */  
  12.     rcu_periph_clock_enable(RCU_DMA);  
  13.       
  14.     /* initialize DMA channel 0 */  
  15.       dma_channel_tx = DMA_CH0;//rx---DMA channel 1  
  16.       
  17.     dma_deinit(dma_channel_tx);  
  18.     dma_struct_para_init(&dma_init_struct);  
  19.     dma_init_struct.request      = DMA_REQUEST_USART0_TX;  
  20.     dma_init_struct.direction    = DMA_MEMORY_TO_PERIPHERAL;  
  21. //    dma_init_struct.memory_addr  = (uint32_t)txbuffer;  
  22.     dma_init_struct.memory_inc   = DMA_MEMORY_INCREASE_ENABLE;  
  23.     dma_init_struct.memory_width = DMA_MEMORY_WIDTH_8BIT;  
  24. //    dma_init_struct.number       = ARRAYNUM(txbuffer);  
  25.     dma_init_struct.periph_addr  = (uint32_t)USART0_TDATA_ADDRESS;  
  26.     dma_init_struct.periph_inc   = DMA_PERIPH_INCREASE_DISABLE;  
  27.     dma_init_struct.periph_width = DMA_PERIPHERAL_WIDTH_8BIT;  
  28.     dma_init_struct.priority     = DMA_PRIORITY_ULTRA_HIGH;  
  29.     dma_init(dma_channel_tx, &dma_init_struct);  
  30.   
  31.     /* configure DMA mode */  
  32.     dma_circulation_disable(dma_channel_tx);  
  33.     dma_memory_to_memory_disable(dma_channel_tx);  
  34.     /* disable the DMAMUX_MUXCH0 synchronization mode */  
  35.     dmamux_synchronization_disable(DMAMUX_MUXCH0);  
  36.     /* enable DMA channel 0 */  
  37.     dma_channel_enable(dma_channel_tx);  
  38.   
  39.     /* USART DMA enable for transmission */  
  40.     usart_dma_transmit_config(USART0, USART_DENT_ENABLE);  
  41.     /* wait DMA Channel transfer complete */  
  42.       
  43. }  

3rx选择DMA_CH1rx初始化部分如下:

  1. dma_channel_enum dma_channel_rx;
  2. \brief      initialize the dma_USART_rx configuration of the com 
  3.     \param[in]  none 
  4.     \param[out] none 
  5.     \retval     none 
  6. */  
  7. void dma_usart_rx_deinit(void)  
  8. {  
  9.         dma_parameter_struct dma_init_struct;  
  10.       
  11.         dma_channel_rx = DMA_CH1;//rx---DMA channel 1  
  12.       
  13.         dma_deinit(dma_channel_rx);  
  14.         dma_struct_para_init(&dma_init_struct);  
  15.         dma_init_struct.request      = DMA_REQUEST_USART0_RX;  
  16.         dma_init_struct.direction    = DMA_PERIPHERAL_TO_MEMORY;  
  17.         dma_init_struct.memory_addr  = (uint32_t)rxbuffer;  
  18.         dma_init_struct.memory_inc   = DMA_MEMORY_INCREASE_ENABLE;  
  19.         dma_init_struct.memory_width = DMA_MEMORY_WIDTH_8BIT;  
  20.         dma_init_struct.number       = ARRAYNUM(rxbuffer);  
  21.         dma_init_struct.periph_addr  = (uint32_t)USART0_RDATA_ADDRESS;  
  22.         dma_init_struct.periph_inc   = DMA_PERIPH_INCREASE_DISABLE;  
  23.         dma_init_struct.periph_width = DMA_PERIPHERAL_WIDTH_8BIT;  
  24.         dma_init_struct.priority     = DMA_PRIORITY_ULTRA_HIGH;  
  25.         dma_init(dma_channel_rx, &dma_init_struct);  
  26.   
  27.         /* configure DMA mode */  
  28.         dma_circulation_disable(dma_channel_rx);  
  29.         dma_memory_to_memory_disable(dma_channel_rx);  
  30.         /* disable the DMAMUX_MUXCH1 synchronization mode */  
  31.         dmamux_synchronization_disable(DMAMUX_MUXCH1);  
  32.   
  33.         /* enable DMA channel  */  
  34.         dma_channel_enable(dma_channel_rx);  
  35.         /* USART DMA enable for reception */  
  36.         usart_dma_receive_config(USART0, USART_DENR_ENABLE);  
  37.     /* wait DMA channel 1 transfer complete */  
  38.           
  39. }  

4rx 接收并打印接收信息,放main函数中调用。

  1. #define     RX_NUM                 100
  2. uint8_t rxbuffer[RX_NUM]="\0";
  3. void dma_usart_rx_process(void)  
  4. {  
  5.         if(RESET == dma_flag_get(dma_channel_rx, DMA_FLAG_FTF))  
  6.         {  
  7.                 if(rxbuffer[0] != '\0')  
  8.                 {  
  9.                         printf("\n\r%s\n\r", rxbuffer);  
  10.                         //transfer_status = judge_rx_result();    
  11.                         usart_clear_buffer(rxbuffer,RX_NUM);   
  12.                         /* initialize the rx */  
  13.                         dma_usart_rx_deinit();  
  14.                 }  
  15.         }       
  16. }  
  17. /*! 
  18.     \brief      clear buffer 
  19.     \param[in]  buffer[]   num 
  20.     \param[out] none 
  21.     \retval     none 
  22. */  
  23. void usart_clear_buffer(uint8_t *buffer,uint32_t num)  
  24. {  
  25.         uint32_t i = 0;  
  26.         for(i = 0;i < num; i++)  
  27.         {  
  28.                 buffer = '\0';  
  29.         }  
  30. }  
  31.   

5)上电初始化 usart dma txrx。用mini USB接口,连接板子上的USART口,打开串口调试器,设置调试器相关参数。初始化时,波特率是115200,调试器对应设置即可,打开串口。

 

 

6)上电,打印如下信息。发送内容对应接收内容

 

  1. 加入按键(用测试板上的按键 wakeup)和灯(用测试板上LED1-LED4),验证调试打印信息。
  1. 初始化按键,然后开启按键扫描,得到按键结果。
  1. enum {  
  2.     KEY_EVENT_CLICK,        //短按  
  3.     KEY_EVENT_LONG,         //长按  
  4.     KEY_EVENT_HOLD,         //保持  
  5.     KEY_EVENT_UP,           //松开  
  6.     KEY_EVENT_DOUBLE_CLICK, //双击  
  7.     KEY_EVENT_TRIPLE_CLICK, //三击  
  8.     KEY_EVENT_FOURTH_CLICK, //四击  
  9.     KEY_EVENT_FIRTH_CLICK,  //五击  
  10. }; 

2)初始化LED灯,响应不同的按键操作。

  1. enum {  
  2.         LED_OFF,       //灯灭    
  3.         LED_ON,        //灯亮  
  4.         LED_Shine,     //灯闪  
  5.         LED_Water01,    //灯流水01  
  6.         LED_Water02,    //灯流水02  
  7. }; 

3)打印按键结果和灯的状态信息。

 

   

  1. 实例功能验证就到这里,上面有些地方写的简单,也比较乱,欢迎指正,一起学习进步。
  2. 后面会对低功耗进行验证。
此帖出自GD32 MCU论坛

最新回复

虚拟USB功能,设备驱动安装失败,无法连接验证 这个最后怎么整?   详情 回复 发表于 2022-2-21 10:50
点赞 关注
 

回复
举报

6587

帖子

0

TA的资源

五彩晶圆(高级)

沙发
 

虚拟USB功能,设备驱动安装失败,无法连接验证

这个最后怎么整?

此帖出自GD32 MCU论坛

点评

下载了一个USB驱动装一下,就可以了。  详情 回复 发表于 2022-2-22 21:50
 
 
 

回复

7

帖子

0

TA的资源

一粒金砂(中级)

板凳
 
Jacktang 发表于 2022-2-21 10:50 虚拟USB功能,设备驱动安装失败,无法连接验证 这个最后怎么整?

下载了一个USB驱动装一下,就可以了。

此帖出自GD32 MCU论坛
 
 
 

回复

7

帖子

0

TA的资源

一粒金砂(中级)

4
 

关于“虚拟USB功能,设备驱动安装失败,无法连接验证”的情况,安装了附件的驱动就可以。

USB_Virtual_Com_Port_Driver_v2.0.2.2673.rar

794.9 KB, 下载次数: 1

此帖出自GD32 MCU论坛
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

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

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表