打印
[CW32F030系列]

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

[复制链接]
1341|16
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 秦生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 | 只看该作者
好歹搞个呼吸灯嘛

使用特权

评论回复
评论
秦生0303 2022-7-6 19:01 回复TA
非也,这里的操作只是验证一下程序正常了,才会进行灯的不同操作 
5
daichaodai| | 2022-7-7 08:24 | 只看该作者
能搞个高级点的点灯不

使用特权

评论回复
6
vivilyly| | 2022-8-18 17:43 | 只看该作者
IAR的pack包有吗      

使用特权

评论回复
7
tifmill| | 2022-8-18 19:12 | 只看该作者
习惯于使用keil开发相关的软件了。   

使用特权

评论回复
8
mikewalpole| | 2022-9-5 16:58 | 只看该作者
工程模板上传一下吧。   

使用特权

评论回复
9
Bowclad| | 2022-9-5 21:39 | 只看该作者
宇宙尽头是点灯

使用特权

评论回复
评论
秦生0303 2022-9-6 13:30 回复TA
点灯才是万物的开始 
10
232321122| | 2022-9-8 15:29 | 只看该作者
CW32F030CxTx 芯片给力呢。   

使用特权

评论回复
11
sheflynn| | 2022-9-8 17:46 | 只看该作者
IAR和keil开发一样的吗

使用特权

评论回复
12
bartonalfred| | 2022-9-11 13:04 | 只看该作者
代码驱动有什么问题吗

使用特权

评论回复
13
Bowclad| | 2022-10-4 19:20 | 只看该作者
开局点灯 哈哈哈

使用特权

评论回复
14
AloneKaven| | 2022-10-5 20:11 | 只看该作者
都是点灯

使用特权

评论回复
评论
秦生0303 2022-10-6 09:24 回复TA
点灯就是个验证而已,最直观的 
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

4

主题

181

帖子

2

粉丝