查看: 4363|回复: 3

[项目] GD32 USART输出

[复制链接]
  • TA的每日心情
    开心
    2016-7-19 10:35
  • 签到天数: 8 天

    连续签到: 1 天

    [LV.3]偶尔看看II

    发表于 2015-12-24 19:56:15 | 显示全部楼层 |阅读模式
    分享到:
    也许是用ST的HAL库用久了,再来用这种STD类的库,就觉得有点吃力,不过有一点,底层细节尽在掌握,也是一种不错的感觉!

    查询207的原理图以及数据手册,USART1直接连接到CH340T上面,GPIO分别为PB6和PB7。

    了解了这些细节之后,就可以来写个小程序测试UART通信。这里只测试了发送的功能。

    在上一个程序的基础上添加UART1的初始化代码
    1. static void USART1_Config(void)
    2. {

    3. GPIO_InitPara GPIO_InitStructure;
    4. USART_InitPara USART_InitStructure;

    5. RCC_APB2PeriphClock_Enable( RCC_APB2PERIPH_GPIOB, ENABLE );

    6. RCC_APB2PeriphClock_Enable(RCC_APB2PERIPH_USART1, ENABLE );
    7. RCC_APB2PeriphClock_Enable(RCC_APB2PERIPH_AF, ENABLE);
    8. GPIO_InitStructure.GPIO_Pin = GPIO_PIN_6 ;
    9. GPIO_InitStructure.GPIO_Mode = GPIO_MODE_AF_PP;
    10. GPIO_InitStructure.GPIO_Speed = GPIO_SPEED_50MHZ;
    11. GPIO_Init( GPIOB , &GPIO_InitStructure);
    12. GPIO_InitStructure.GPIO_Pin = GPIO_PIN_7;
    13. GPIO_InitStructure.GPIO_Mode = GPIO_MODE_IN_FLOATING;;
    14. GPIO_Init( GPIOB , &GPIO_InitStructure);

    15. GPIO_PinRemapConfig(GPIO_REMAP_USART1, ENABLE);


    16. USART_InitStructure.USART_BRR = 115200;
    17. USART_InitStructure.USART_WL = USART_WL_8B;
    18. USART_InitStructure.USART_STBits = USART_STBITS_1;
    19. USART_InitStructure.USART_Parity = USART_PARITY_RESET;
    20. USART_InitStructure.USART_HardwareFlowControl = USART_HARDWAREFLOWCONTROL_NONE;
    21. USART_InitStructure.USART_RxorTx = USART_RXORTX_RX | USART_RXORTX_TX;
    22. USART_Init(USART1, &USART_InitStructure);

    23. /* USART enable */
    24. USART_Enable(USART1, ENABLE);

    25. }


    26. static void HAL_USART1_SendBytes(const char *msg)
    27. {

    28. while(*msg)
    29. {
    30. USART_DataSend(USART1, *(msg++));
    31. while(USART_GetBitState(USART1, USART_FLAG_TBE) == RESET);
    32. }
    33. }



    复制代码
    依照HAL库的模式写了个发送字串的函数HAL_USART1_SendBytes(const char *msg),主函数里分别对UART1进行初始化及发送数据。

    QQ截图20151224194254.png


    碰到的几个问题:

    1. 下载后不会自动运行,尽管在工程里设置为下载后运行,但是还是没有效果,非得按下RESET。
    2. USART中的TBE标志位,一直将数据缓冲区理解为DR,绕了好久才搞清楚,晕死
    3. BSP中的发送和接收函数,都没有考虑超时因素

    库函数已经比较完整了,一些细节问题还要补充,比如上面提到的UART发送和接收的问题。

    总的来说,已经有点感觉了,很不错,向GD的工程师们致敬!

    回复

    使用道具 举报

  • TA的每日心情
    开心
    2020-1-23 13:44
  • 签到天数: 243 天

    连续签到: 1 天

    [LV.8]以坛为家I

    发表于 2015-12-24 22:58:58 | 显示全部楼层
    多谢分享。。。。学习中
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2020-5-27 15:41
  • 签到天数: 868 天

    连续签到: 1 天

    [LV.10]以坛为家III

    发表于 2016-1-3 13:11:52 | 显示全部楼层
    N神,那个串口的管脚复用从哪里看,看了手册,没明白管脚的复用是怎么确定其中一个的

    记得STM 有复用时钟 和复用寄存器
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2016-7-19 10:35
  • 签到天数: 8 天

    连续签到: 1 天

    [LV.3]偶尔看看II

     楼主| 发表于 2016-1-3 17:18:22 | 显示全部楼层
    wambob 发表于 2016-1-3 13:11
    N神,那个串口的管脚复用从哪里看,看了手册,没明白管脚的复用是怎么确定其中一个的

    记得STM 有复用时钟  ...

    你是说引脚么,原理图上有
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

    站长推荐上一条 /2 下一条



    手机版|小黑屋|与非网

    GMT+8, 2024-12-24 20:17 , Processed in 0.131654 second(s), 22 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.