USART串口理论知识总结

[复制链接]
发表于 2026-2-19 09:08:56 | 显示全部楼层 |阅读模式
提示:文章写完后,目次可以主动天生,怎样天生可参考右边的资助文档
  


1、通讯的串行和并行






1.串口采取发送数据代码并用printf重代码

  1. #include <stdint.h>
  2. #include <stdio.h>
  3. #include "gd32f30x.h"
  4. static void Usb2ComGpioInit(void)
  5. {
  6.         rcu_periph_clock_enable(RCU_GPIOA);
  7.         //配置TX引脚对于的管脚为复用推挽输出模式,输出模式有复用和一般模式的区别,而输出无这样的的区别。
  8.         gpio_init(GPIOA, GPIO_MODE_AF_PP, GPIO_OSPEED_10MHZ, GPIO_PIN_9);//发送引脚
  9.         //配置TX引脚对于的管脚为上拉输入或者浮空输入
  10.         //why  串口默认输出高电平,读取数据是,空闲状态和数据起始位都为低电平。
  11.         gpio_init(GPIOA, GPIO_MODE_IPU, GPIO_OSPEED_10MHZ, GPIO_PIN_10);//接受引脚
  12. }
  13. static void Usb2ComUartInit(uint32_t baudRate)
  14. {
  15.         /* 使能UART时钟;*/
  16.         rcu_periph_clock_enable(RCU_USART0);
  17.        
  18.         /* 复位UART;*/
  19.         usart_deinit (USART0);
  20.        
  21.         /* 通过USART_CTL0寄存器的WL设置字长;*/
  22.         /* 初始默认WL字长为8bit*/
  23.         usart_word_length_set(USART0, USART_WL_8BIT);
  24.        
  25.         /* 通过USART_CTL0寄存器的PCEN设置校验位;*/
  26.         /* 初始默认无校验位*/
  27.         usart_parity_config(USART0, USART_PM_NONE);
  28.        
  29.         /* 在USART_CTL1寄存器中写STB[1:0]位来设置停止位的长度;*/
  30.         /*初始默认停止位1bit  可选0.5 1 1.5 2*/
  31.         usart_stop_bit_set(USART0, USART_STB_1BIT);
  32.        
  33.         /* 在USART_BAUD寄存器中设置波特率;*/
  34.         usart_baudrate_set(USART0, baudRate);
  35.        
  36.         /* 在USART_CTL0寄存器中设置TEN位,使能发送功能;*/
  37.         usart_transmit_config(USART0, USART_TRANSMIT_ENABLE);
  38.        
  39.         /* 在USART_CTL0寄存器中置位UEN位,使能UART;*/
  40.         usart_enable(USART0);
  41. }
  42. void Usb2ComTest(void)
  43. {
  44.         for (uint8_t i = 0; i <= 250; i++)
  45.         {
  46.                 usart_data_transmit(USART0, i);//发送数据
  47.                 while (RESET == usart_flag_get(USART0, USART_FLAG_TBE));  
  48.                 //当TBE为0,等待,当TBE为0时,表示TXR数据寄存器有数据,需要继续等待
  49.                 //当TBE为1,跳出循环,表示TXR数据寄存器无数据,可以继续向位移寄存器下一个数据。
  50.                 ////总结:RENE和TBE标志位为1是都表示已经准备好的意思,可以开始接受和发送下一个数据。TC为1时表示数据发送完毕。
  51.         }
  52. //        while (RESET == usart_flag_get(g_uartHwInfo.uartNo, USART_FLAG_TC));
  53. //        usart_transmit_config(g_uartHwInfo.uartNo, USART_TRANSMIT_DISABLE);
  54.         //TC为1时,跳出循环,表示位移寄存器数据(无数据),即发送完毕。
  55.         //TC为0时,等待,表示位移寄存器数据有数据,需要继续等待。
  56. }
  57. /**
  58. ***********************************************************
  59. * @brief USB转串口硬件初始化
  60. * @param
  61. * @return
  62. ***********************************************************
  63. */
  64. void Usb2ComDrvInit(void)
  65. {
  66.         Usb2ComGpioInit();
  67.         Usb2ComUartInit(115200);
  68. }
  69. /**
  70. ***********************************************************
  71. * @brief printf函数默认打印输出到显示器,如果要输出到串口,
  72.                  必须重新实现fputc函数,将输出指向串口,称为重定向
  73. * @param
  74. * @return
  75. ***********************************************************
  76. */
  77. int fputc(int ch, FILE *f)
  78. {
  79.         usart_data_transmit(USART0, (uint8_t)ch);
  80.         while (RESET == usart_flag_get(USART0, USART_FLAG_TBE));
  81.         return ch;
  82. }
复制代码


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!qidao123.com:ToB企服之家,中国第一个企服评测及软件市场,开放入驻,技术点评得现金

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表