本帖最后由 yinwuqing110 于 2020-7-20 00:58 编辑
收到HC32F460-EVB开发板有半个月,前段时间由于外地出差,没有及时分享评测贴,实感抱歉,趁周末的时间,把玩了一下HC32F460-EVB开发板,该开发板采用HC32F460PETB作为主核心MCU。HC32F460系列是基于ARM Cortex-M4 32-bit RISC CPU,最高工作频率168MHz的高性能 MCU。Cortex-M4内核集成了浮点运算单元(FPU)和DSP,实现单精度浮点算术运算,支持所有ARM单精度数据处理指令和数据类型,支持完整DSP指令集。集成了MPU单元。HC32F460系列集成了高速片上存储器,包括最大512KB的Flash,最大192KB的 SRAM。集成了Flash访问加速单元,实现CPU在Flash上的单周期程序执行,集成了丰富的外设功能。关于HC32F460-EVB开发板的SDK包下载地址说明如下:
根据华大官方给出的命名规则,可知HC32F460PETB的性能是相当全面的
收到板卡时,外形包装如下:
拆开包装袋,看看主角的正视图
然后将OLED模块,“黑匣子”拆下来
看看板卡的背面,布线规范,四个脚用胶柱支撑固定,MCU旁边有明显PCB加线长的画板方法
整个板子的功能框图如下
引脚配置图如下
模块的详细说明如下
三个调试接口详情如下
接着进入https://github.com/hdscmcu/hc32f460/archive/master.zip,下载好“hc32f460-master.zip”文件,解压后打开“hc32f460-master\hc32f460_sdk\驱动库及样例\hc32f46x_ddl\example\usart\uart_polling_rx_tx”工程,简单测试一下串口收发功能。开发板搭载串行通信接口模块(USART 4个单元,串行通信接口模块(USART)能够灵活地与外部设备进行全双工数据交换;本USART支持通用异步串行通信接口(UART),时钟同步通信接口,智能卡接口(ISO/IEC7816-3)。支持调制解调器操作(CTS/RTS操作),多处理器操作。实现UART的部分代码如下:
- #include "hc32_ddl.h"
- /*******************************************************************************
- * Local pre-processor symbols/macros ('#define')
- ******************************************************************************/
- /* USART channel definition */
- #define USART_CH (M4_USART3)
- /* USART baudrate definition */
- #define USART_BAUDRATE (115200ul)
- /* USART RX Port/Pin definition */
- #define USART_RX_PORT (PortE)
- #define USART_RX_PIN (Pin04)
- #define USART_RX_FUNC (Func_Usart3_Rx)
- /* USART TX Port/Pin definition */
- #define USART_TX_PORT (PortE)
- #define USART_TX_PIN (Pin05)
- #define USART_TX_FUNC (Func_Usart3_Tx)
- /*******************************************************************************
- * Local function prototypes ('static')
- ******************************************************************************/
- static void ClkInit(void);
- static void UsartRxErrProcess(void);
- /*******************************************************************************
- ** \brief Initialize Clock.
- **
- ** \param [in] None
- **
- ** \retval None
- **
- ******************************************************************************/
- static void ClkInit(void)
- {
- stc_clk_xtal_cfg_t stcXtalCfg;
- stc_clk_mpll_cfg_t stcMpllCfg;
- en_clk_sys_source_t enSysClkSrc;
- stc_clk_sysclk_cfg_t stcSysClkCfg;
- MEM_ZERO_STRUCT(enSysClkSrc);
- MEM_ZERO_STRUCT(stcSysClkCfg);
- MEM_ZERO_STRUCT(stcXtalCfg);
- MEM_ZERO_STRUCT(stcMpllCfg);
- /* Set bus clk div. */
- stcSysClkCfg.enHclkDiv = ClkSysclkDiv1; /* Max 168MHz */
- stcSysClkCfg.enExclkDiv = ClkSysclkDiv2; /* Max 84MHz */
- stcSysClkCfg.enPclk0Div = ClkSysclkDiv1; /* Max 168MHz */
- stcSysClkCfg.enPclk1Div = ClkSysclkDiv2; /* Max 84MHz */
- stcSysClkCfg.enPclk2Div = ClkSysclkDiv4; /* Max 60MHz */
- stcSysClkCfg.enPclk3Div = ClkSysclkDiv4; /* Max 42MHz */
- stcSysClkCfg.enPclk4Div = ClkSysclkDiv2; /* Max 84MHz */
- CLK_SysClkConfig(&stcSysClkCfg);
- /* Switch system clock source to MPLL. */
- /* Use Xtal as MPLL source. */
- stcXtalCfg.enMode = ClkXtalModeOsc;
- stcXtalCfg.enDrv = ClkXtalLowDrv;
- stcXtalCfg.enFastStartup = Enable;
- CLK_XtalConfig(&stcXtalCfg);
- CLK_XtalCmd(Enable);
- /* MPLL config. */
- stcMpllCfg.pllmDiv = 1ul;
- stcMpllCfg.plln = 50ul;
- stcMpllCfg.PllpDiv = 4ul;
- stcMpllCfg.PllqDiv = 4ul;
- stcMpllCfg.PllrDiv = 4ul;
- CLK_SetPllSource(ClkPllSrcXTAL);
- CLK_MpllConfig(&stcMpllCfg);
- /* flash read wait cycle setting */
- EFM_Unlock();
- EFM_SetLatency(EFM_LATENCY_5);
- EFM_Lock();
- /* Enable MPLL. */
- CLK_MpllCmd(Enable);
- /* Wait MPLL ready. */
- while (Set != CLK_GetFlagStatus(ClkFlagMPLLRdy))
- {
- }
- /* Switch system clock source to MPLL. */
- CLK_SetSysClkSource(CLKSysSrcMPLL);
- }
- /*******************************************************************************
- ** \brief USART RX error process function.
- **
- ** \param [in] None
- **
- ** \retval None
- **
- ******************************************************************************/
- static void UsartRxErrProcess(void)
- {
- if (Set == USART_GetStatus(USART_CH, UsartFrameErr))
- {
- USART_ClearStatus(USART_CH, UsartFrameErr);
- }
- if (Set == USART_GetStatus(USART_CH, UsartParityErr))
- {
- USART_ClearStatus(USART_CH, UsartParityErr);
- }
- if (Set == USART_GetStatus(USART_CH, UsartOverrunErr))
- {
- USART_ClearStatus(USART_CH, UsartOverrunErr);
- }
- }
- /*******************************************************************************
- ** \brief Main function of project
- **
- ** \param None
- **
- ** \retval int32_t return value, if needed
- **
- ******************************************************************************/
- int32_t main(void)
- {
- uint16_t u16RxData;
- en_result_t enRet = Ok;
- uint32_t u32Fcg1Periph = PWC_FCG1_PERIPH_USART1 | PWC_FCG1_PERIPH_USART2 | \
- PWC_FCG1_PERIPH_USART3 | PWC_FCG1_PERIPH_USART4;
- const stc_usart_uart_init_t stcInitCfg = {
- UsartIntClkCkNoOutput,
- UsartClkDiv_1,
- UsartDataBits8,
- UsartDataLsbFirst,
- UsartOneStopBit,
- UsartParityNone,
- UsartSamleBit8,
- UsartStartBitFallEdge,
- UsartRtsEnable,
- };
- /* Initialize Clock */
- ClkInit();
- /* 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);
- while (1)
- {
- 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();
- }
- }
串口打印的信息如下:
实物连线图如下所示,此次就大略的分享到这里,后续再持续体验HC32F460-EVB开发板的高配置全功能性啦,感谢各位围观,欢迎吐槽,咱们后会有期。
HC32F460 EVB Introduction.pdf
(932.55 KB, 下载次数: 32)
HC32F460系列的通用同步异步收发器USART Rev1.0.pdf
(464.97 KB, 下载次数: 11)
HC32F460系列数据手册Rev1.1.pdf
(2.15 MB, 下载次数: 10)
|