到这里咱们的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 );
LED的控制基本上就是普通IO口的控制,这里注意延时函数的选择,基本上都不是特别精准的。