[CW32F030系列] 【CW32F030CxTx StartKit测评】02基于IAR创建工程并驱动LED

[复制链接]
1907|16
 楼主| 秦生0303 发表于 2022-7-4 21:36 | 显示全部楼层 |阅读模式
本帖最后由 秦生0303 于 2022-7-4 21:36 编辑

      很快就收到了开发板,没有板载的调试器,不过引出了SWD调试接口,板子也极大的考虑了测试的自由性,所有的引脚都被引出,接下来就让我们一起去熟悉CW32F030的软件工程,本人使用的是IAR8.30,创建如下工程文件:
文件夹.jpg

      其中Libraries对应的就是cw32f030-stdperiph-lib中的Libraries,这里面是CW32F030芯片的各个功能的底层函数;
      然后Template中的main和interrupts_cw32f030就是该工程的主函数文件和中断函数文件;
      启动文件存放到Startup中;
      在工程里边建立IAR_project(存放工程文件)和CMSIS(存放配置文件及基础文件例如icf等)文件夹。

      接下来就是配置IAR:
      选择工程名——Options;
      选择单片机

选择单片机.jpg
      配置CMSIS,一种方法是使用IAR自带的内核文件,一种是在咱们自己创建的CMSIS中添加厂家提供的文件,CW不存在兼容问题,可以直接用IAR的内核文件。

CMSIS配置.jpg
      配置include,注意一定要把对应的C文件和头文件所在文件夹都添加进去:
include.jpg
      配置输出文件:

输出文件配置.jpg
      配置Linker configuration:

ICF配置.jpg
      仿真配置:本人使用Jlink调试,选择正确的调试工具
仿真配置.jpg

      选择正确的FlashLoader

仿真配置2.jpg
      Jlink配置:注意选择SWD模式

Jlink配置.jpg
      到这里咱们的IAR配置就基本完成了,属于个人的工程,就可以开始程序编写,不需要写具体的程序,先Make一下,检查一下是否还有一些未知的配置错误,可以根据提示进行修改。

      程序的运行是根据启动文件的顺序进行了,对于时钟配置可以直接在SystemInit中进行修改,而且启动文件已经调用了,不用再在main中重新调用。
大家看一下下面错误的时钟配置函数:
  1. //  RCC_SYSCLKSRC_Config(RCC_SYSCLKSRC_PLL);
  2. //  RCC_HCLKPRS_Config(RCC_HCLK_DIV1);
  3. //  RCC_PCLKPRS_Config(RCC_PCLK_DIV2);
  4. //  RCC_HSE_Enable( RCC_HSE_MODE_OSC, 16000000,RCC_HSE_DRIVER_NORMAL, RCC_HSE_FLT_CLOSE);
  5. // RCC_PLL_Enable(RCC_PLLSOURCE_HSECLK,16000000,4);
  6. //  
  7. //  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。
      修改后如下:
  1. RCC_AHBPeriphClk_Enable(RCC_AHB_PERIPH_FLASH, ENABLE);   //打开FLASH时钟
  2.       RCC_HCLKPRS_Config(RCC_HCLK_DIV1);
  3.       RCC_PCLKPRS_Config(RCC_PCLK_DIV2);
  4.       RCC_HSE_Enable(RCC_HSE_MODE_OSC, 16000000, RCC_HSE_DRIVER_NORMAL, RCC_HSE_FLT_CLOSE);
  5.       RCC_PLL_Enable(RCC_PLLSOURCE_HSECLK,16000000,4);
  6.       FLASH_SetLatency(FLASH_Latency_2);   //频率大于24M需要配置FlashWait=2
  7.       RCC_SysClk_Switch(RCC_SYSCLKSRC_PLL );
     通过时钟参数的获取可以查看配置是否正确,其中res = 64M,res1 = 32M。

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

  4.   //set PB08 / PB09 as inupt with pur / int = none
  5.   GPIO_InitStruct.Pins = GPIO_PIN_8 | GPIO_PIN_9;
  6.   GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  7.   GPIO_InitStruct.IT   = GPIO_IT_LOW;
  8.   GPIO_Init( CW_GPIOB , &GPIO_InitStruct);
  9.   
  10.   GPIO_WritePin( CW_GPIOB , GPIO_PIN_8 , GPIO_Pin_SET );
  11.   while(1)
  12.   {
  13.     PB08_TOG();
  14.     FirmwareDelay(10000000);//不精准定时1s
  15.   }

weifeng90 发表于 2022-7-5 08:19 来自手机 | 显示全部楼层
哈哈,点灯被玩坏了。
 楼主| 秦生0303 发表于 2022-7-5 20:00 | 显示全部楼层
weifeng90 发表于 2022-7-5 08:19
哈哈,点灯被玩坏了。

时钟配置完都是点灯
chenqianqian 发表于 2022-7-5 20:24 来自手机 | 显示全部楼层
好歹搞个呼吸灯嘛

评论

非也,这里的操作只是验证一下程序正常了,才会进行灯的不同操作  发表于 2022-7-6 19:01
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 | 显示全部楼层
宇宙尽头是点灯

评论

点灯才是万物的开始  发表于 2022-9-6 13:30
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 | 显示全部楼层
都是点灯

评论

点灯就是个验证而已,最直观的  发表于 2022-10-6 09:24
您需要登录后才可以回帖 登录 | 注册

本版积分规则

4

主题

181

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部