[CW32F003系列] 【CW32F003ExPx StartKit开发板】进阶之串口通讯

[复制链接]
1944|5
 楼主| peterLaw 发表于 2024-6-14 09:38 | 显示全部楼层 |阅读模式
对于单片机来说信息交互显示才是有利于问题排查的一个友好界面。一般情况下,大多数单片机都有串口通讯,
下面咱们就以芯源的CW32F003ExPx StartKit开发板给大家展示串口通讯的一个过程。
首先咱们查阅文档发现CW32F003ExPx StartKit开发板PA00与PB02分别为串口接收与发送口,
而且这2个引脚挨在一起方便引线。
111.png
222.jpg
下面就是对这个2个引脚的复用配置,以及串口波特率等参数配置
  1. //UARTx
  2. #define  DEBUG_USARTx                   CW_UART1
  3. #define  DEBUG_USART_CLK                RCC_APB2_PERIPH_UART1
  4. #define  DEBUG_USART_APBClkENx          RCC_APBPeriphClk_Enable2
  5. #define  DEBUG_USART_BaudRate           9600
  6. #define  DEBUG_USART_UclkFreq           8000000

  7. //UARTx GPIO
  8. #define  DEBUG_USART_TX_GPIO_CLK        RCC_AHB_PERIPH_GPIOB
  9. #define  DEBUG_USART_RX_GPIO_CLK        RCC_AHB_PERIPH_GPIOA
  10. #define  DEBUG_USART_TX_GPIO_PORT       CW_GPIOB   
  11. #define  DEBUG_USART_TX_GPIO_PIN        GPIO_PIN_2
  12. #define  DEBUG_USART_RX_GPIO_PORT       CW_GPIOA
  13. #define  DEBUG_USART_RX_GPIO_PIN        GPIO_PIN_0

  14. //GPIO AF
  15. #define  DEBUG_USART_AFTX               PB02_AFx_UART1TXD()
  16. #define  DEBUG_USART_AFRX               PA00_AFx_UART1RXD()
  1. void GPIO_Configuration(void)
  2. {
  3.   GPIO_InitTypeDef GPIO_InitStructure;

  4.   //UART TX RX 复用
  5.   DEBUG_USART_AFTX;                     
  6.   DEBUG_USART_AFRX;                     

  7.   GPIO_InitStructure.Pins = DEBUG_USART_TX_GPIO_PIN;
  8.   GPIO_InitStructure.Mode = GPIO_MODE_OUTPUT_PP;
  9.   GPIO_Init(DEBUG_USART_TX_GPIO_PORT, &GPIO_InitStructure);
  10.    
  11.   GPIO_InitStructure.Pins = DEBUG_USART_RX_GPIO_PIN;
  12.   GPIO_InitStructure.Mode = GPIO_MODE_INPUT_PULLUP;
  13.   GPIO_Init(DEBUG_USART_RX_GPIO_PORT, &GPIO_InitStructure);
  14. }

  15. /**
  16. * [url=home.php?mod=space&uid=247401]@brief[/url] 配置UART
  17. *
  18. */
  19. void UART_Configuration(void)
  20. {
  21.   USART_InitTypeDef USART_InitStructure;

  22.   USART_InitStructure.USART_BaudRate = DEBUG_USART_BaudRate;
  23.   USART_InitStructure.USART_Over = USART_Over_16;
  24.   USART_InitStructure.USART_Source = USART_Source_PCLK;
  25.   USART_InitStructure.USART_UclkFreq = DEBUG_USART_UclkFreq;
  26.   USART_InitStructure.USART_StartBit = USART_StartBit_FE;
  27.   USART_InitStructure.USART_StopBits = USART_StopBits_1;
  28.   USART_InitStructure.USART_Parity = USART_Parity_No ;
  29.   USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
  30.   USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
  31.   USART_Init(DEBUG_USARTx, &USART_InitStructure);        
  32. }
然后就是prinft重定向
  1. PUTCHAR_PROTOTYPE
  2. {
  3.   USART_SendData_8bit(DEBUG_USARTx, (uint8_t)ch);

  4.   while (USART_GetFlagStatus(DEBUG_USARTx, USART_FLAG_TXE) == RESET);

  5.   return ch;
  6. }
编写主函数main
  1. int32_t main(void)
  2. {
  3.   //配置RCC
  4.   RCC_Configuration();

  5.   //配置GPIO
  6.   GPIO_Configuration();

  7.   //配置UART
  8.   UART_Configuration();
  9.         uint8_t i=1;

  10.   printf("\r\n %d CW32F003 UART Printf Example\r\n",i);

  11.   while(1)
  12.   {         
  13.                         i++;
  14.                         Delay(0x7ffff);
  15.                         printf("\r\nWelcome to CW32F003 UART Example %d \r\n", i);
  16.                         Delay(0x7ffff);

  17.   }   
  18. }
这样就能够正常显示打印了,用串口调试助手进行通讯测试:


需要注意的是串口通讯的TTL电平,串口接收也需要是TTL电平的才可以,否则会无法通讯或乱码

小夏天的大西瓜 发表于 2024-6-17 22:51 | 显示全部楼层
TTL电平需要对应的才能通讯
OKAKAKO 发表于 2024-6-21 21:14 | 显示全部楼层
楼主串口讲解的非常详细
中国龙芯CDX 发表于 2024-6-26 16:40 | 显示全部楼层
串口通讯的TTL电平确实需要注意的地方
jf101 发表于 2024-6-27 16:52 | 显示全部楼层
串口通讯讲解的非常清楚
AdaMaYun 发表于 2024-7-9 13:39 | 显示全部楼层
串口TTL电平需要相应的TTL电平接口进行通信
您需要登录后才可以回帖 登录 | 注册

本版积分规则

32

主题

459

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部