本次实验在开发板上建立串口通信,方便其它实验。实验中选择了开发板上已经具备的“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)通信中的应用,本次实验只是做异步通信。
在串口通信中有几个比较重要的参数需要事前约定,如通信速率、数据位宽、停止位位数、有无校验等。通信速率与串口工作的时钟频率有着密切的关系。HC32F460支持多种时钟工作
“波特率生成器提供小数波特率模式和整数波特率模式。整数波特率模式误差较大时,可采用小数波特率模式来降低波特率计算误差 ”这种灵活的波特率设置可以保证将通信误差降至最低水平。
上述文档对于波特率设置讲解非常详细,对于这一参数的理解有很大的帮助。
三、代码实现
下面是实验中用到的资源:
实验的代码按照DEMO中轮询通讯例程进行修改:
- void USART_Config(void)
- {
- en_result_t enRet = Ok;
- uint32_t u32Fcg1Periph = PWC_FCG1_PERIPH_USART3;
- const stc_usart_uart_init_t stcInitCfg =
- {
- UsartIntClkCkNoOutput,
- UsartClkDiv_1,
- UsartDataBits8,
- UsartDataLsbFirst,
- UsartOneStopBit,
- UsartParityNone,
- UsartSamleBit8,
- UsartStartBitFallEdge,
- UsartRtsEnable,
- };
- /* Enable peripheral clock */
- PWC_Fcg1PeriphClockCmd(u32Fcg1Periph, Enable);
- /* Initialize USART IO */
- PORT_SetFunc(USART_RX_PORT, USART_RX_PIN, USART_RX_FUNC, Disable);
- PORT_SetFunc(USART_TX_PORT, USART_TX_PIN, USART_TX_FUNC, Disable);
- /* Initialize UART */
- enRet = USART_UART_Init(USART_CH, &stcInitCfg);
- if (enRet != Ok)
- {
- while (1)
- {
- }
- }
- /* Set baudrate */
- enRet = USART_SetBaudrate(USART_CH, USART_BAUDRATE);
- if (enRet != Ok)
- {
- while (1)
- {
- }
- }
- /*Enable RX && TX function*/
- USART_FuncCmd(USART_CH, UsartRx, Enable);
- USART_FuncCmd(USART_CH, UsartTx, Enable);
- }
- void Usart_Rx_Tx(void)
- {
- uint16_t u16RxData;
- if (Set == USART_GetStatus(USART_CH, UsartRxNoEmpty)) /* Warit Rx data register no empty */
- {
- u16RxData = USART_RecData(USART_CH);
- while (Reset == USART_GetStatus(USART_CH, UsartTxEmpty)); /* Warit Tx data register empty */
- USART_SendData(USART_CH, u16RxData);
- }
- UsartRxErrProcess();
- }
- int32_t main(void)
- {
- int8_t get_sys_clk;
-
- /* Initialize Clock */
- ClkInit();
- USART_Config();
- get_sys_clk = CLK_GetSysClkSource();
- printf("\r\n sys_clk = %d ",get_sys_clk);
- printf("\r\n HC32F460PETB USART TEST IS OK!");
- while (1)
- {
- Usart_Rx_Tx();
- }
- }
四、实验结果
五、实验总结
通过USART3通信实验对HC32F460PETB串口的使用有了初步认识,并为后面的其他一些实验提供了方便。
|