本帖最后由 nich20xx 于 2020-10-28 07:43 编辑
1 前言HC32F460_EVB是华大半导体推出一款基于32bit Cortex-M4F内核的高性能MCU HC32F460的评估板。板上搭载了一颗采用LQFP100封装 、集成FPU、MPU及支持SIMD指令DSP的高性能微控制器HC32F460PETB。 HC32F460采用40nm eFlash先进工艺,最高工作主频为168MHz,Flash加速单元(高效的Cache和Prefetch)保证0-wait程序执行,并达到210DMIPS或485Coremarks的运算性能。 HC32F460芯片的片上资源非常丰富,包括2个独立12-bit 2.5MSPS ADC,DAC、1个PGA、3个高速比较器CMP,众多的通信接口有I2C、I2S、SPI、USART、SDIO、QSPI、CAN、USB2.0 FS,支持AES/HASH/TRNG数据加密功能。业界领先抗ESD,抗Latch up,低EMI,5V耐压I/O等特性。
1.1 官方资源- 华大官网 https://www.hdsc.com.cn/
- 百度网盘下载链接: https://pan.baidu.com/s/1hlcBW0rOg_1w3spzE2SbEQ 提取码:kj7u
- 腾讯微云下载链接 https://share.weiyun.com/mYaXwqf6
- 华大HC32F460官方资料github仓库 https://github.com/hdscmcu/hc32f460
2 HC32F460_EVB简介
2.1 HC32F460_EVB硬件资源
HC32F460_EVB板载资源非常的丰富,同时还预留了很多扩展接口,便于搭建产品原型等,主要资源如下:
- Cortex-M4
- 512K FLASH,192K SRAM
- 最大主频168MHz
- 板载32768晶振与8MHz高频晶振
- 板载Micro SD卡槽(TF卡)
- 板载SMART CARD接口
- 板载1个电位器,可用于ADC12测试
- 具备4个独立按键和3x3矩阵按键,1个复位按键
- 板载4个用户LED,1个电源LED
- 板载USB转串口芯片,用于串口日志打印,同时通过USB口供电
- 板载0.91英寸 OLED屏(128*32)
- 板载USB-FS micro USB接口
- JTAG-20、SWB-5烧写接口
- 外设IO全部引出,便于快速搭建产品测试
- 扩展出1路SPI接口(SPI3)、I2C接口(I2C1)、2路串口(USART3\USART4)MOTOR接口、
2.1.1 系统供电2.1.1.1 USB-UART (J1) 使用Mircro USB cable通过J1供电5V,跳帽J2需短接。这种方式可以使用USB转串口功能。 2.1.1.2 DC-IN(TP1、TP3)通过TP1 (5V)和TP3(GND)直接5V供电 2.1.1.3 USB-Device(J14)将MCU作为USB-Device时,通过J14(Micro USB Cable)供电 ,需短接跳帽J15。 2.1.1.4 JTAG(J3)标准JTAG接口电路(J3)也可以直接提供3.3V供电。使用时,注意供电电流。 2.1.2 烧写(仿真)接口2.1.1.1 JTAG-20标准JTAG接口电路(J3),支持JTAG调试 2.1.1.2 SWD-55线SWD调试接口(J4),支持SWD调试 2.1.3 调试串口J1,USB-UART电路,与HC32F460的USART3相连,可打印串口调试信息 2.2 HC32F460_EVB软件资源HC32F460_EVB提供了比较详细与完整的SDK开发包,供用户参考使用,示例代码支持MDK、IAR开发,上手非常的方便。 从https://github.com/hdscmcu/hc32f460 下载的hc32f460-master.zip,解压后如下 3 Window下搭建MDK开发环境3.1 安装MDK DFP
使用MDK开发,若已经安装好MDK5,还需要安装华大MCU(HC32F46x)的pack支持包(DFP (Device Family Pack))。 在 hc32f460-master\hc32f460_sdk\CMSIS_PACK 文件夹下,点击安装最新的pack包即可 3.2 流水灯测试示例- 进入hc32f460-master\hc32f460_sdk\DeviceDriverLibrary\hc32f46x_ddl\example\gpio\gpio_output目录,打开MDK工程并编译,使用JLINK直接下载到EVB中。
- 可以看到4个LED以每100ms交替闪烁,实现流水灯效果
int32_t main(void)
{
stc_port_init_t stcPortInit;
/* configuration structure initialization */
MEM_ZERO_STRUCT(stcPortInit);
stcPortInit.enPinMode = Pin_Mode_Out;
stcPortInit.enExInt = Enable;
stcPortInit.enPullUp = Enable;
/* LED0 Port/Pin initialization */
PORT_Init(LED0_PORT, LED0_PIN, &stcPortInit);
/* LED1 Port/Pin initialization */
PORT_Init(LED1_PORT, LED1_PIN, &stcPortInit);
/* LED2 Port/Pin initialization */
PORT_Init(LED2_PORT, LED2_PIN, &stcPortInit);
/* LED3 Port/Pin initialization */
PORT_Init(LED3_PORT, LED3_PIN, &stcPortInit);
while(1)
{
LED0_TOGGLE();
Ddl_Delay1ms(DLY_MS);
LED1_TOGGLE();
Ddl_Delay1ms(DLY_MS);
LED2_TOGGLE();
Ddl_Delay1ms(DLY_MS);
LED3_TOGGLE();
Ddl_Delay1ms(DLY_MS);
/* de-init if necessary */
//PORT_DeInit();
};
}
3.3 串口回环测试示例- 进入\hc32f460-master\hc32f460_sdk\DeviceDriverLibrary\hc32f46x_ddl\example\usart\uart_polling_rx_tx目录,打开MDK工程并编译,使用JLINK直接下载到EVB中。
- 打开PC端串口调试助手,115200N81,然后发送任意字符,EVB中USART3会返回接收到的字符,在串口调试助手可以看到EVB返回的字符。
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();
}
}
4 参考- HC32F460 SDK包简介 HC32F460 EVB Introduction.pdf
- 华大MCU官网 https://www.hdsc.com.cn/
- 华大官方资料github仓库 https://github.com/hdscmcu/hc32f460
- 【活动】华大开发板周周送,免费派送进行中 https://bbs.21ic.com/icview-2996440-1-1.html
|