秦生0303 发表于 2022-7-4 21:36

【CW32F030CxTx StartKit测评】02基于IAR创建工程并驱动LED

本帖最后由 秦生0303 于 2022-7-4 21:36 编辑

      很快就收到了开发板,没有板载的调试器,不过引出了SWD调试接口,板子也极大的考虑了测试的自由性,所有的引脚都被引出,接下来就让我们一起去熟悉CW32F030的软件工程,本人使用的是IAR8.30,创建如下工程文件:
      其中Libraries对应的就是cw32f030-stdperiph-lib中的Libraries,这里面是CW32F030芯片的各个功能的底层函数;      然后Template中的main和interrupts_cw32f030就是该工程的主函数文件和中断函数文件;      启动文件存放到Startup中;      在工程里边建立IAR_project(存放工程文件)和CMSIS(存放配置文件及基础文件例如icf等)文件夹。
      接下来就是配置IAR:      选择工程名——Options;      选择单片机
      配置CMSIS,一种方法是使用IAR自带的内核文件,一种是在咱们自己创建的CMSIS中添加厂家提供的文件,CW不存在兼容问题,可以直接用IAR的内核文件。
      配置include,注意一定要把对应的C文件和头文件所在文件夹都添加进去:       配置输出文件:
      配置Linker configuration:
      仿真配置:本人使用Jlink调试,选择正确的调试工具
      选择正确的FlashLoader
      Jlink配置:注意选择SWD模式
      到这里咱们的IAR配置就基本完成了,属于个人的工程,就可以开始程序编写,不需要写具体的程序,先Make一下,检查一下是否还有一些未知的配置错误,可以根据提示进行修改。
      程序的运行是根据启动文件的顺序进行了,对于时钟配置可以直接在SystemInit中进行修改,而且启动文件已经调用了,不用再在main中重新调用。大家看一下下面错误的时钟配置函数://RCC_SYSCLKSRC_Config(RCC_SYSCLKSRC_PLL);
//RCC_HCLKPRS_Config(RCC_HCLK_DIV1);
//RCC_PCLKPRS_Config(RCC_PCLK_DIV2);
//RCC_HSE_Enable( RCC_HSE_MODE_OSC, 16000000,RCC_HSE_DRIVER_NORMAL, RCC_HSE_FLT_CLOSE);
// RCC_PLL_Enable(RCC_PLLSOURCE_HSECLK,16000000,4);
//
//res = RCC_SysClk_Switch( RCC_SYSCLKSRC_PLL );      本开发板使用16M外部时钟,最大可以配置64M主频,但是将这样的时钟配置下载后直接导致芯片锁了,Jlink直接无法识别,只能通过CW Programmer V1.53使用ISP的方式清除Flash才回复正常。      接下来参考rcc_hsi_pll(src_hse)中的时钟配置,有一条有关Flash读等待周期的配置,查看使用手册,有一条非常显著的提醒:系统时钟切换时需要同步配置FLASH 控制寄存器FLASH_CR2.WAIT 读等待周期参数:系统时钟频率不大于24MHz 则应设置FLASH 控制寄存器FLASH_CR2.WAIT 为0;系统时钟频率大于24MHz 则应设置FLASH控制寄存器FLASH_CR2.WAIT为1;系统时钟频率大于48MHz 则应设置FLASH 控制寄存器FLASH_CR2.WAIT 为2。当前被锁的原因应该就是在这里,030的最大主频为64M,因此FLASH_CR2.WAIT选择2。      修改后如下:RCC_AHBPeriphClk_Enable(RCC_AHB_PERIPH_FLASH, ENABLE);   //打开FLASH时钟
      RCC_HCLKPRS_Config(RCC_HCLK_DIV1);
      RCC_PCLKPRS_Config(RCC_PCLK_DIV2);
      RCC_HSE_Enable(RCC_HSE_MODE_OSC, 16000000, RCC_HSE_DRIVER_NORMAL, RCC_HSE_FLT_CLOSE);
      RCC_PLL_Enable(RCC_PLLSOURCE_HSECLK,16000000,4);
      FLASH_SetLatency(FLASH_Latency_2);   //频率大于24M需要配置FlashWait=2
      RCC_SysClk_Switch(RCC_SYSCLKSRC_PLL );      通过时钟参数的获取可以查看配置是否正确,其中res = 64M,res1 = 32M。

      LED的控制基本上就是普通IO口的控制,这里注意延时函数的选择,时钟修改后对应的选择数也要发生变化,基本上都不是特别精准的。GPIO_InitTypeDef GPIO_InitStruct;
       
CW_SYSCTRL->AHBEN_f.GPIOB = 1;    //Open GPIOB Clk

//set PB08 / PB09 as inupt with pur / int = none
GPIO_InitStruct.Pins = GPIO_PIN_8 | GPIO_PIN_9;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.IT   = GPIO_IT_LOW;
GPIO_Init( CW_GPIOB , &GPIO_InitStruct);

GPIO_WritePin( CW_GPIOB , GPIO_PIN_8 , GPIO_Pin_SET );
while(1)
{
    PB08_TOG();
    FirmwareDelay(10000000);//不精准定时1s
}

weifeng90 发表于 2022-7-5 08:19

哈哈,点灯被玩坏了。

秦生0303 发表于 2022-7-5 20:00

weifeng90 发表于 2022-7-5 08:19
哈哈,点灯被玩坏了。

时钟配置完都是点灯

chenqianqian 发表于 2022-7-5 20:24

好歹搞个呼吸灯嘛

daichaodai 发表于 2022-7-7 08:24

能搞个高级点的点灯不

vivilyly 发表于 2022-8-18 17:43

IAR的pack包有吗      

tifmill 发表于 2022-8-18 19:12

习惯于使用keil开发相关的软件了。   

mikewalpole 发表于 2022-9-5 16:58

工程模板上传一下吧。   

Bowclad 发表于 2022-9-5 21:39

宇宙尽头是点灯

232321122 发表于 2022-9-8 15:29

CW32F030CxTx 芯片给力呢。   

sheflynn 发表于 2022-9-8 17:46

IAR和keil开发一样的吗

bartonalfred 发表于 2022-9-11 13:04

代码驱动有什么问题吗

Bowclad 发表于 2022-10-4 19:20

开局点灯 哈哈哈

AloneKaven 发表于 2022-10-5 20:11

都是点灯
页: [1]
查看完整版本: 【CW32F030CxTx StartKit测评】02基于IAR创建工程并驱动LED