[牛人杂谈] 系统初始化的步骤

[复制链接]
1379|9
 楼主| dongnanxibei 发表于 2018-3-8 17:30 | 显示全部楼层 |阅读模式
好多人看了例子头蒙, 一堆初始化,那么是怎么个顺序呢,如果自己做,会不会漏项呢?
假设我们是准备使用GPIO,那么怎么初始化系统呢?
我们的M0/M4系列因为有多个时钟源,所以CPU和外设都有多个时钟源可以选择。系统初始化的步骤如下:
 使能外部/内部晶振,并等待晶振稳定(PWRCTL寄存器和CLKSTATUS寄存器)
 选择CPU时钟源(CLKSEL0寄存器)
 选择外设时钟源(CLKSEL1/CLKSEL2等寄存器)
 使能外设时钟(APBCLK寄存器)
 设定GPIO的功能(PA_L_MFP/PA_H_MFP等寄存器)

 楼主| dongnanxibei 发表于 2018-3-8 17:30 | 显示全部楼层
M0/M4系列一般有5个时钟源可以选择。内部有2个晶振:内部高速晶振(HIRC)一般22.1184M或者12M或者16M;内部低速晶振(LIRC),一般是10K,有的32.768K
外部可以接2个晶振:外部高速晶振(HXT),一般可以接4M ~ 24M;外部低速晶振(LXT),一般接32.768K
另外再加锁相环(PLL),可以选择HXT和HIRC超频到50M,或者更高
这5种时钟源,每个外设和CPU大都可以选择。
外设选好上面5种时钟哪种做时钟源之后,写APBCLK寄存器使能时钟
 楼主| dongnanxibei 发表于 2018-3-8 17:30 | 显示全部楼层
注意:如果外设时钟不等于CPU时钟(比CPU时钟慢),写外设寄存器的时候需要SW自己同步。看门狗一般选择内部10K时钟做时钟源,我们就以看门狗代码为例,代码如下:
WDT->CTL = WDT_TIMEOUT_2POW14| 0 |
(0 << WDT_CTL_WTRE_Pos) |
(1 << WDT_CTL_WTWKE_Pos);/*喂狗周期2^14,使能唤醒功能*/
Delay(200);/*Delay 200us*/
WDT->CTL | = WDT_CTL_WTE_Msk ;/*使能看门狗*/
上面的代码连续写两次CTL寄存器,第二次写和第一次写之间需要等2个看门狗时钟周期,就是2个10K时钟,大概200us
如果上面的代码改成这样:WDT->CTL = WDT_TIMEOUT_2POW14| WDT_CTL_WTE_Msk |0 | (0 << WDT_CTL_WTRE_Pos) | (1 << WDT_CTL_WTWKE_Pos);/*喂狗周期2^14,使能唤醒功能,同时使能看门狗*/
这样就不需要delay了,因为同一个寄存器只写一次。
huangcunxiake 发表于 2018-3-8 22:37 | 显示全部楼层
言之有理,不过用寄存器有点累啊,有库函数的也可以
 楼主| dongnanxibei 发表于 2018-3-9 16:38 | 显示全部楼层
我发现一些例子直接实现同一个功能用了不同的方式,比如有的例子用库函数,有的用寄存器操作,不知道为何。
yiyigirl2014 发表于 2018-3-10 08:58 | 显示全部楼层
这个要学习Cortex M0的架构才行,这个是关键,因为基本上内核结构都是ARM做的。
734774645 发表于 2018-3-10 09:54 | 显示全部楼层
    /* Enable UART module clock */
    CLK_EnableModuleClock(UART0_MODULE);

    /* Select UART module clock source */
    CLK_SetModuleClock(UART0_MODULE, CLK_CLKSEL1_UART_S_PLL, CLK_CLKDIV_UART(1));

    /* Enable UART module clock */
    CLK_EnableModuleClock(UART0_MODULE);

    /* Select UART module clock source */
    CLK_SetModuleClock(UART0_MODULE, CLK_CLKSEL1_UART_S_HXT, CLK_CLKDIV_UART(1));

我们看到这两个例子中什么配置都是一样的,到这里,串口模块的时钟源选择的是不同的。

734774645 发表于 2018-3-10 10:02 | 显示全部楼层
QQ截图20180310095633.png
看到没,问题在这,也就是说,有四个选项。但是两个选项是一样的,也就是10和11是一样的。一般用11 ,不用10
antusheng 发表于 2018-3-10 16:57 | 显示全部楼层
只看例子必须的蒙,要看例子配合手册中的结构图,把结构图打印出来,放一张纸上,放大,贴墙上,好好研究研究。
xinpian101 发表于 2018-3-11 12:46 | 显示全部楼层
手册看了,大概意思是,不要关闭原来的默认内部HIRC时钟,配置后面的其他时钟就可不分先后。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

225

主题

3848

帖子

18

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