[开发工具] 【华大测评】三、USART

[复制链接]
 楼主| lisingch 发表于 2020-6-27 14:34 | 显示全部楼层 |阅读模式
      本次实验在开发板上建立串口通信,方便其它实验。实验中选择了开发板上已经具备的“USB-UART”端口(J1),直接使用一根Micro数据线与电脑连接,通过串口助手软件就能与PC建立通信。

一、实验资源
1、HC32F460-EVB;
2、Keil V5.28;
3、ST-LINK调试器;
4、Type-A to Micro数据线

二、资源简介

      HC32F460PETB具备4个通道的UART端口,支持全双工同、异步通信,支持智能卡接口  (ISO/IEC7816-3),支持调制解调器操作以及多处理器通信。UART与USART在做异步通信时两者没有什么区别,但USART在做同步通信时能够提供主动时钟,例如在智能卡 (ISO/IEC7816-3)通信中的应用,本次实验只是做异步通信。
2020-06-27_123426.png
2020-06-27_132821.png
2020-06-27_123503.png
2020-06-27_123519.png

      在串口通信中有几个比较重要的参数需要事前约定,如通信速率、数据位宽、停止位位数、有无校验等。通信速率与串口工作的时钟频率有着密切的关系。HC32F460支持多种时钟工作
2020-06-27_140124.png
2020-06-27_140441.png
2020-06-27_140458.png
2020-06-27_140515.png

      “波特率生成器提供小数波特率模式和整数波特率模式。整数波特率模式误差较大时,可采用小数波特率模式来降低波特率计算误差 ”这种灵活的波特率设置可以保证将通信误差降至最低水平。
2020-06-27_140740.png
2020-06-27_140825.png
上述文档对于波特率设置讲解非常详细,对于这一参数的理解有很大的帮助。

三、代码实现
      下面是实验中用到的资源:
2020-06-27_123131.png
2020-06-27_123351.png

      实验的代码按照DEMO中轮询通讯例程进行修改:
  1. void USART_Config(void)
  2. {
  3.         en_result_t enRet = Ok;
  4.         uint32_t u32Fcg1Periph = PWC_FCG1_PERIPH_USART3;
  5.         const stc_usart_uart_init_t stcInitCfg =
  6.         {
  7.                 UsartIntClkCkNoOutput,
  8.                 UsartClkDiv_1,
  9.                 UsartDataBits8,
  10.                 UsartDataLsbFirst,
  11.                 UsartOneStopBit,
  12.                 UsartParityNone,
  13.                 UsartSamleBit8,
  14.                 UsartStartBitFallEdge,
  15.                 UsartRtsEnable,
  16.         };

  17.         /* Enable peripheral clock */
  18.         PWC_Fcg1PeriphClockCmd(u32Fcg1Periph, Enable);

  19.         /* Initialize USART IO */
  20.         PORT_SetFunc(USART_RX_PORT, USART_RX_PIN, USART_RX_FUNC, Disable);
  21.         PORT_SetFunc(USART_TX_PORT, USART_TX_PIN, USART_TX_FUNC, Disable);

  22.         /* Initialize UART */
  23.         enRet = USART_UART_Init(USART_CH, &stcInitCfg);
  24.         if (enRet != Ok)
  25.         {
  26.                 while (1)
  27.                 {
  28.                 }
  29.         }

  30.         /* Set baudrate */
  31.         enRet = USART_SetBaudrate(USART_CH, USART_BAUDRATE);
  32.         if (enRet != Ok)
  33.         {
  34.                 while (1)
  35.                 {
  36.                 }
  37.         }

  38.         /*Enable RX && TX function*/
  39.         USART_FuncCmd(USART_CH, UsartRx, Enable);
  40.         USART_FuncCmd(USART_CH, UsartTx, Enable);
  41. }

  1. void Usart_Rx_Tx(void)
  2. {
  3.         uint16_t u16RxData;
  4.         if (Set == USART_GetStatus(USART_CH, UsartRxNoEmpty))         /* Warit Rx data register no empty */
  5.         {
  6.                 u16RxData = USART_RecData(USART_CH);
  7.                 while (Reset == USART_GetStatus(USART_CH, UsartTxEmpty));  /* Warit Tx data register empty */
  8.                 USART_SendData(USART_CH, u16RxData);
  9.         }
  10.         UsartRxErrProcess();
  11. }

  1. int32_t main(void)
  2. {
  3.         int8_t get_sys_clk;
  4.        
  5.         /* Initialize Clock */
  6.         ClkInit();
  7.         USART_Config();
  8.         get_sys_clk = CLK_GetSysClkSource();
  9.         printf("\r\n sys_clk = %d ",get_sys_clk);
  10.         printf("\r\n HC32F460PETB USART TEST IS OK!");
  11.         while (1)
  12.     {
  13.         Usart_Rx_Tx();
  14.     }
  15. }


四、实验结果
2020-06-27_143056.png

五、实验总结
      通过USART3通信实验对HC32F460PETB串口的使用有了初步认识,并为后面的其他一些实验提供了方便。

gaoyang9992006 发表于 2020-7-31 08:54 | 显示全部楼层
ST-LINK调试器?
意思是这个开发板没有烧录器吗,还是厂家送的是ST-LINK,或者是兼容ST-LINK。
ST-LINK我还是有的。
 楼主| lisingch 发表于 2020-7-31 10:53 | 显示全部楼层
gaoyang9992006 发表于 2020-7-31 08:54
ST-LINK调试器?
意思是这个开发板没有烧录器吗,还是厂家送的是ST-LINK,或者是兼容ST-LINK。
ST-LINK我还 ...

板子上没有集成调试器,但有JTAG和SWD接口,J-LINK和ST-LINK都可以用,J-LINK太占地方所以就用了ST-LINK做调试器。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

99

主题

15005

帖子

19

粉丝
快速回复 返回顶部 返回列表