本帖最后由 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)
|