打印
[开发工具]

【HC32L196PCTA测评】+开箱+例程验证+RTT移植测试

[复制链接]
554|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 love2008 于 2023-8-29 10:12 编辑

HC32L196PCTA测评
开箱如图

拆开包装



产品特点
⚫ 48MHz Cortex-M0+ 32 位 CPU 平台
⚫ HC32F190/HC32F196 系列具有灵活的功耗管理系统,低功耗性能– 3μA @3V深度休眠模式 所有时钟关闭,上电复位有效, IO状态保持, IO中断有效,所有寄存器、 RAM和 CPU 数据保存状态时的功耗– 10μA @32.768KHz低速工作模式CPU运行,外设关闭,从 Flash运行程序– 30μA/MHz@3V@24MHz休眠模式CPU停止,外设关闭,主时钟运行
– 130μA/MHz@3V@24MHz工作模式CPU运行,外设关闭,从 Flash运行程序
– 4μs唤醒时间 使模式切换更加灵活高效,系统反应更为敏捷
⚫ 256K字节 Flash存储器,具有擦写保护功能 支持 ISP、 ICP、 IAP
⚫ 32K字节 RAM存储器,附带奇偶校验,增强系统的稳定性
⚫ 通用 I/O 引脚( 88IO/100PIN, 72IO/80PIN 56IO/64PIN, 40IO/48PIN, 26IO/32PIN
⚫ 时钟、晶振
– 外部高速晶振 4 ~ 32MHz
– 外部低速晶振 32.768KHz
– 内部高速时钟 4/8/16/22.12/24MHz
– 内部低速时钟 32.8/38.4KHz
– PLL时钟 8 ~ 48MHz
– 硬件支持内外时钟校准和监控
⚫ 定时器 /计数器
– 3个 1通道互补 输出 通用 16位定时器
– 1个 3通道互补输出 通用 16位定时器
– 3个高性能 16位定时器 /计数器,支持PWM 互补,死区保护功能
– 1个可编程 16位定时器 PCA,支持 5通道捕获比较, 5通道 PWM输出
– 1个 20位可编程看门狗电路,内建专用 10KHz振荡器提供 WDT 计数
⚫ 通讯接口
– 4路 UART标准通讯接口
– 2路 SPI标准通讯接口
– 2路 I2C标准通讯接口
⚫ 蜂鸣器频率发生器,支持互补输出
⚫ 硬件 CRC16 / CRC32 模块
⚫ AES-128/192/256 硬件协处理器
⚫ TRNG 真随机数发生器
⚫ 2通道 DMAC
⚫ 4*52 / 6*50 / 8*48 LCD驱动
⚫ 全球唯一 10字节 ID 号
⚫ 12位 1Msps采样的高速高精度 SARADC内置跟随器,可测量高输出阻抗的信号
⚫ 1路 12位 500Ksps DAC
⚫ 集成 1个多功能运算放大器 可以作为DAC的输出 Buffer
⚫ 集成 3路电压比较器,具有 6位 DAC和可编程比较基准
⚫ 集成低电压侦测器,可配置 16阶比较电压 ,可监控端口电压以及电源电压
⚫ SWD 调试解决方案,提供全功能调试器
⚫ 工作条件 ::-40 ~ 1.8 ~ 5.5V
⚫ 封装形式: LQFP100/80/64/48, QFN32

各种资源丰富,我主要用于户外电源的BMS以及面板控制和逆变的前驱控制.

测试官方例程:
/**
******************************************************************************
** \brief  主函数
**
** @param  无
** \retval 无
**
******************************************************************************/
int32_t main(void)
{
    Sysctrl_ClkSourceEnable(SysctrlClkRCL,TRUE);            ///< 使能RCL时钟
    Sysctrl_SetRCLTrim(SysctrlRclFreq32768);                ///< 配置内部低速时钟频率为32.768kHz

    Sysctrl_SetPeripheralGate(SysctrlPeripheralLcd,TRUE);   ///< 开启LCD时钟
    Sysctrl_SetPeripheralGate(SysctrlPeripheralGpio,TRUE);  ///< 开启GPIO时钟

    App_PortCfg();               ///< LCD端口配置
    App_LcdCfg();                ///< LCD模块配置

    Lcd_ClearDisp();             ///< 清屏
    Lcd_WriteRam(0,0x0f0f0f0f);  ///< 赋值寄存器LCDRAM0
    Lcd_WriteRam(1,0x0f0f0f0f);  ///< 赋值寄存器LCDRAM1

    while(1)
    {
        ;
    }
}



en_result_t Sysctrl_ClkSourceEnable(en_sysctrl_clk_source_t enSource, boolean_t bFlag)
{
    en_result_t enRet = Ok;
    uint32_t u32Temp;

    _SysctrlUnlock();
    bFlag = !!bFlag;

    u32Temp = M0P_SYSCTRL->PERI_CLKEN0;
    switch (enSource)
    {
        case SysctrlClkRCH:
            M0P_SYSCTRL->SYSCTRL0_f.RCH_EN = bFlag;
            while(bFlag && (1 != M0P_SYSCTRL->RCH_CR_f.STABLE))
            {
                ;
            }
            break;

        case SysctrlClkXTH:
            M0P_SYSCTRL->PERI_CLKEN0_f.GPIO = TRUE;
            M0P_GPIO->PFADS |= 3u;
            M0P_SYSCTRL->SYSCTRL0_f.XTH_EN = bFlag;
            while(bFlag && (1 != M0P_SYSCTRL->XTH_CR_f.STABLE))
            {
                ;
            }
            break;

        case SysctrlClkRCL:

            M0P_SYSCTRL->SYSCTRL0_f.RCL_EN = bFlag;
            while(bFlag && (1 != M0P_SYSCTRL->RCL_CR_f.STABLE))
            {
                ;
            }
            break;

        case SysctrlClkXTL:
            M0P_SYSCTRL->PERI_CLKEN0_f.GPIO = TRUE;
            M0P_GPIO->PCADS |= 0xC000;
            M0P_SYSCTRL->SYSCTRL0_f.XTL_EN = bFlag;
            while(bFlag && (1 != M0P_SYSCTRL->XTL_CR_f.STABLE))
            {
                ;
            }
            break;

        case SysctrlClkPLL:
            M0P_SYSCTRL->PERI_CLKEN0_f.ADC = TRUE;
            M0P_BGR->CR_f.BGR_EN = TRUE;
            delay10us(20);
            M0P_SYSCTRL->SYSCTRL0_f.PLL_EN = bFlag;
            while(bFlag && (1 != M0P_SYSCTRL->PLL_CR_f.STABLE))
            {
                ;
            }
            break;

        default:
            enRet = ErrorInvalidParameter;
            break;
    }
    M0P_SYSCTRL->PERI_CLKEN0 = u32Temp;

    return enRet;
}


/**
******************************************************************************
** \brief  初始化外部GPIO引脚
**
** \return 无
******************************************************************************/
void App_PortCfg(void)
{
    Gpio_SetAnalogMode(GpioPortA, GpioPin9);  //COM0
    Gpio_SetAnalogMode(GpioPortA, GpioPin10); //COM1
    Gpio_SetAnalogMode(GpioPortA, GpioPin11); //COM2
    Gpio_SetAnalogMode(GpioPortA, GpioPin12); //COM3   

    Gpio_SetAnalogMode(GpioPortA, GpioPin8);  //SEG0
    Gpio_SetAnalogMode(GpioPortC, GpioPin9);  //SEG1
    Gpio_SetAnalogMode(GpioPortC, GpioPin8);  //SEG2
    Gpio_SetAnalogMode(GpioPortC, GpioPin7);  //SEG3
    Gpio_SetAnalogMode(GpioPortC, GpioPin6);  //SEG4
    Gpio_SetAnalogMode(GpioPortB, GpioPin15); //SEG5
    Gpio_SetAnalogMode(GpioPortB, GpioPin14); //SEG6
    Gpio_SetAnalogMode(GpioPortB, GpioPin13); //SEG7
    Gpio_SetAnalogMode(GpioPortB, GpioPin3);  //VLCDH
    Gpio_SetAnalogMode(GpioPortB, GpioPin4);  //VLCD3
    Gpio_SetAnalogMode(GpioPortB, GpioPin5);  //VLCD2
    Gpio_SetAnalogMode(GpioPortB, GpioPin6);  //VLCD1

}

/**
******************************************************************************
** \brief  配置LCD
**
** \return 无
******************************************************************************/
void App_LcdCfg(void)
{
    stc_lcd_cfg_t LcdInitStruct;
    stc_lcd_segcom_t LcdSegCom;

    LcdSegCom.u32Seg0_31 = 0xffffff00;                              ///< 配置LCD_POEN0寄存器 开启SEG0~SEG7
    LcdSegCom.stc_seg32_51_com0_8_t.seg32_51_com0_8 = 0xffffffff;   ///< 初始化LCD_POEN1寄存器 全部关闭输出端口
    LcdSegCom.stc_seg32_51_com0_8_t.segcom_bit.Com0_3 = 0;          ///< 使能COM0~COM3
    LcdSegCom.stc_seg32_51_com0_8_t.segcom_bit.Mux = 0;             ///< Mux=0,Seg32_35=0,BSEL=1表示:选择外部电容工作模式,内部电阻断路
    LcdSegCom.stc_seg32_51_com0_8_t.segcom_bit.Seg32_35 = 0;
    Lcd_SetSegCom(&LcdSegCom);                                      ///< LCD COMSEG端口配置

    LcdInitStruct.LcdBiasSrc = LcdExtCap;                          ///< 电容分压模式,需要外部电路配合
    LcdInitStruct.LcdDuty = LcdDuty4;                              ///< 1/4duty
    LcdInitStruct.LcdBias = LcdBias3;                              ///< 1/3 BIAS
    LcdInitStruct.LcdCpClk = LcdClk2k;                             ///< 电压泵时钟频率选择2kHz
    LcdInitStruct.LcdScanClk = LcdClk128hz;                        ///< LCD扫描频率选择128Hz
    LcdInitStruct.LcdMode = LcdMode0;                              ///< 选择模式0
    LcdInitStruct.LcdClkSrc = LcdRCL;                              ///< LCD时钟选择RCL
    LcdInitStruct.LcdEn   = LcdEnable;                             ///< 使能LCD模块
    Lcd_Init(&LcdInitStruct);
}


测试结果: 全屏显示8.8:8.8


插上MicroUsb,板子Led2 呼吸灯,板子自带CMSIS_DAP,方便开发调试

准备移植RTT系统.

初步移植OK...下一步创建2个任务




与STM32F0xx的脚位是pin to pin 的,完全可以替代,资源比ST的还要丰富,值得一用..




使用特权

评论回复
沙发
yangxiaor520| | 2023-8-8 08:44 | 只看该作者
为什么取个WebUSB名称

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

29

帖子

1

粉丝