打印
[牛人杂谈]

系统初始化的步骤

[复制链接]
1088|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
好多人看了例子头蒙, 一堆初始化,那么是怎么个顺序呢,如果自己做,会不会漏项呢?
假设我们是准备使用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 | 只看该作者
言之有理,不过用寄存器有点累啊,有库函数的也可以

使用特权

评论回复
5
dongnanxibei|  楼主 | 2018-3-9 16:38 | 只看该作者
我发现一些例子直接实现同一个功能用了不同的方式,比如有的例子用库函数,有的用寄存器操作,不知道为何。

使用特权

评论回复
6
yiyigirl2014| | 2018-3-10 08:58 | 只看该作者
这个要学习Cortex M0的架构才行,这个是关键,因为基本上内核结构都是ARM做的。

使用特权

评论回复
7
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));

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

使用特权

评论回复
8
734774645| | 2018-3-10 10:02 | 只看该作者

看到没,问题在这,也就是说,有四个选项。但是两个选项是一样的,也就是10和11是一样的。一般用11 ,不用10

使用特权

评论回复
9
antusheng| | 2018-3-10 16:57 | 只看该作者
只看例子必须的蒙,要看例子配合手册中的结构图,把结构图打印出来,放一张纸上,放大,贴墙上,好好研究研究。

使用特权

评论回复
10
xinpian101| | 2018-3-11 12:46 | 只看该作者
手册看了,大概意思是,不要关闭原来的默认内部HIRC时钟,配置后面的其他时钟就可不分先后。。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

201

主题

3582

帖子

16

粉丝