时钟配置
系统时钟默认高速内部时钟HIS,如果想要切换主时钟,可添加以下配置:
bool_t bSucc = eFALSE;
CLK_SWCR |= 0x02; /* 时钟切换使能 */
CLK_SWR = 0xB4; /* 选择目标时钟源 0xB4: HSE,0xE1: HIS, 0xD2: LSI */
while(CLK_SWCR & 0x01); /* 等待时钟切换完成 */
if (CLK_SWCR & 0x08) /* 判断目标时钟源是否准备就绪 */
{
CLK_SWCR = !0x08;
bSucc = eTRUE;
}
return bSucc;
系统时钟分频,默认是8分频,时钟分频寄存器如图所示:
HIS时钟比其他时钟多一个分配器,可查看时钟树,如图所示:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BdkxQ9oT-1640787486170)(/imges/clktree.png)]
一般默认8分频即可,但如果使用串口通信,则选择1分频,频率太低会丢包。
CLK_CKDIVR = 0x00;
看门狗配置
看门狗用于解决软件卡死跑飞的问题,通俗的说就是计时复位,如果一段时间程序没执行喂狗函数,就会将程序复位,重新开始运行。
我们这里使用独立看门狗,它由一个内部128kHz的LSI阻容振荡器作为时钟源驱动,因此即使是主时钟失效时它仍然照常工作。
初始化配置如下:
void HW_Init_IWDG(void)
{
/* Enable IWDG */
IWDG_KR = 0xcc;
/* relieve PR and PLR write protection */
IWDG_KR = 0x55;
/* watchdog counter reload value */
IWDG_RLR = 0xff;
/* Set prescaler register to 256, 1.02s */
IWDG_PR = 0x06;
/* Reloads IWDG count