打印
[CW32F030系列]

【CW32F030CxTx StartKit测评】1.LED测试

[复制链接]
384|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 zhouminjie 于 2022-7-8 22:06 编辑

非常感谢芯源和二姨给予这次测评CW32F030CxTx StartKit开发板的机会,CW32F030是芯源自主研发的首款基于 Cortex-M0+ 内核MCU,与其他品牌Pin2Pin引脚兼容,可以满足各种基础应用


CW32F030CxTx StartKit开发板上没有板载仿真器,建议在以后推出的开发板上能增加板载仿真器,板载资源比较丰富,除了LED指示灯和轻触开关外,还包括了华邦25Q64Flash芯片、24C02 EEPROM芯片以及USB转串口芯片CH340
开发板原理图: PSMCU0006.pdf (52.28 KB)

1、开发环境设置
Keil软件安装完成后,在芯源官网下载芯片固件库CW32F030_StdPeriph_Lib压缩文件(下载地址:https://www.whxy.com/support/filelist?id=13&c=8)


下载完成后解压压缩文件,找到PSMCU0005--->cw32f030-stdperiph-lib--->IdeSupport--->MDK--->PS.CW32F030_DFP.1.0.1.pack


双击安装.pack文件,安装完成后Keil便支持芯源芯片
也可在keil中点击Pack Installer进行安装


在Pack Installer界面中,点击选择File--->Import…


在对话框中选择.pack文件路径,找到.pack文件后,点击打开,开始安装


安装完成后,Device一栏中会显示



2、新建工程
新建工程文件夹CW32F030CxTx_LEDtest,工程文件夹中新建各子文件夹


点击Project--->New uVision Project…
选择进入CW32F030CxTx_LEDtest中Mdk文件夹,输入project工程名,点击保存


选择芯片型号CW32F030C8,点击OK


在显示的Manage Run-Time Environment对话框中,需要√选CMSIS--->CORE(注意此处和其他厂商32位机新建工程时不同),点击OK


点击File Extensions, Books and Environment…


在Manage Project Items中,新建Groups,并在其中添加相应的.c文件,点击OK


Project一栏中显示


点击Options for Target…


Output一栏勾选Create HEX File


C/C++--->IncludePaths中添加工程.h文件路径




Debug一栏选择仿真器仿真,仿真器选用J-LINK




3、硬件
PB9引脚连接LED1,使用J-LINK的SWD模式,连接VCC、GND、SWDIO、SWCLK






4、软件
LED1驱动引脚PB9的复用功能GTIM4_CH1,通用定时器4作PWM输出功能时,PB9作为CH1输出


GTIM配置PWM功能输出时,需注意预分频系数只可设置为2的N次方,这里和其他32位机有所区别


GTIM4作PWM输出时,使用的是定时器模式,根据PWM周期时间及分频系数,便可计算出重载值ARR


PWM配置步骤


PWM初始化
void hal_pwmInit(void)
{
    GPIO_InitTypeDef GPIO_InitStructure;
    GTIM_InitTypeDef GTIM_InitStructure;

    __RCC_GPIOB_CLK_ENABLE();
    __RCC_GTIM4_CLK_ENABLE();

    GPIO_InitStructure.IT = GPIO_IT_NONE;
    GPIO_InitStructure.Mode = GPIO_MODE_OUTPUT_PP;
    GPIO_InitStructure.Pins = LED2_PIN;
    GPIO_InitStructure.Speed = GPIO_SPEED_HIGH;
    PB09_AFx_GTIM4CH1();
    GPIO_Init(LED2_PORT, &GPIO_InitStructure);

    GTIM_InitStructure.Mode = GTIM_MODE_TIME;
    GTIM_InitStructure.OneShotMode = GTIM_COUNT_CONTINUE;
    GTIM_InitStructure.Prescaler = GTIM_PRESCALER_DIV8; //TCLKD = PCLK / 8 = 48MHz / 8 = 6MHz
    GTIM_InitStructure.ReloadValue = 2999; //ARR值 = 500(PWM周期值us) / (1 / 6(MHz)) - 1 = 500 * 6 - 1
    GTIM_InitStructure.ToggleOutState = DISABLE;

    GTIM_TimeBaseInit(CW_GTIM4, >IM_InitStructure);
    GTIM_OCInit(CW_GTIM4, GTIM_CHANNEL1, GTIM_OC_OUTPUT_PWM_LOW);
    GTIM_SetCompare1(CW_GTIM4, 0);
    //GTIM_ITConfig(CW_GTIM4, GTIM_IT_OV, ENABLE);

    GTIM_Cmd(CW_GTIM4, ENABLE);
}

呼吸灯效果处理
void BreathingProc(void)
{
    static unsigned short dir, LEDPwmVal;

    if(dir == 0) //从暗到亮
        LEDPwmVal += 10;
    else //从亮到暗
        LEDPwmVal -= 10;

    if(LEDPwmVal > 2999)
        dir = 1;

    if(LEDPwmVal == 0)
        dir = 0;

    GTIM_SetCompare1(CW_GTIM4, LEDPwmVal);
}

main函数
int main(void)
{
    //RCC_HSI_Enable(RCC_HSIOSC_DIV6); //系统上电复位完成后默认选择HSI 作为SysClk 的时钟源,时钟频率默认值是8MHz(48MHz6分频)
                //RCC_HSE_Enable( RCC_HSE_MODE_OSC, 16000000, RCC_HSE_DRIVER_NORMAL, RCC_HSE_FLT_CLOSE); //外部高速时钟作为系统时钟源,板载晶振频率16MHz
        
                hal_CPUInit();
    hal_ledInit();
                hal_pwmInit();
        
    OS_TaskInit();
    //OS_TaskCreat(OS_TASK1, LedProc, 1, OS_SLEEP); //10ms调用一次
        
                OS_TaskCreat(OS_TASK2, BreathingProc, 1, OS_SLEEP); //10ms调用一次
        
    OS_Start();
}

5、调试验证LED1呼吸灯显示效果


6、测试代码
CW32F030CxTx_LEDtest.rar (2.77 MB)


使用特权

评论回复
沙发
海滨消消| | 2022-8-15 11:06 | 只看该作者
恭喜点灯成功

使用特权

评论回复
板凳
mickit| | 2022-8-16 20:07 | 只看该作者
这个学习

使用特权

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

本版积分规则

31

主题

135

帖子

3

粉丝