STM32单片机:PLL编程(STM32L4xx)

STM32L4x系列芯片运行的主频最高可达80MHz,但芯片内部自带的振荡器或外部晶体均达不到这么高的频率,为了最大限度发挥芯片的性能,需要提供一种机制,将这些时钟源的频率倍频到接近或等于80MHz,以充分发挥芯片的性能。所以STM32L4x系列芯片内部提供了一种倍频电路,即PLL。

STM32L41x/42x/43x/44x/45x/46x系列芯片内部嵌入了2个PLL:PLL、PLLSAI1。每个PLL最多提供三个独立的输出,如下图:

STM32L47x/48x/49x/4ax系列芯片内部嵌入了3个PLL:PLL、PLLSAI1、PLLSAI2。每个PLL最多提供三个独立的输出,如下图:                                   

可以用作PLL输入时钟的时钟源包括:

  • MSI :内部多频率时钟,时钟频率可以设定,频率范围从100kHz到48MHz
  • HSI16:内部高速16MHz
  • HSE:外部高速晶体振荡器,频率范围是4MHz到48MHz

这三个时钟通过寄存器(RCC_PLLCFGR)(PLLSRC[1:0])(图1)来选择其中一个作为PLL的输入时钟。

                                     图1

由于PLL输入频率必须在4MHz到16MHz之间,如果被选择的输入时钟频率大于16MHz,那么可以通过寄存器(RCC_PLLCFGR)(PLLM[2:0])(图1)将输入的时钟频率进行分频,其分频系数为:/1  /2  /3  /4  /5  /6  /7  /8,通过分频将输入时钟频率降低到4MHz到16MHz之间。

对以上的描述做个总结:PLL输入时钟的处理过程如下图所示:

这3个PLL、PLLSAI1、PLLSAI2模块里面,每个模块里面都有一个倍频器,可以将输入频率倍频到 Fvco。每个模块的倍频系数分别位于:

PLL模块:寄存器(RCC_PLLCFGR)(PLLN[7:0])

PLLSAI1模块:寄存器(RCC_PLLSAI1CFGR)(PLLSAI1N[7:0])

PLLSAI2模块:寄存器(RCC_PLLSAI2CFGR)(PLLSAI2N[7:0])

这几个模块的倍频系数范围都是:8 到 86 之间的整数。

Fvco = PLLCLK_IN * 倍频系数。

Fvco的频率范围是:64MHz 到 344MHz。所以需要选择适当的倍频系数,确保得到的Fvco频率处于有效的区间内。

得到Fvco这个时钟频率后,但这个时钟频率不能直接输出供系统使用,因此在每个PLL模块中,Fvco分别通过三个独立的分频器,产生3个独立的输出,供系统的各个模块使用。

STM32L41x/42x/43x/44x/45x/46x: PLL

PLLP = Fvco  /  寄存器(RCC_PLLCFGR)(PLLPDIV[4:0])   分频系数:2 到 31

PLL48M1CLK = Fvco  /  寄存器(RCC_PLLCFGR)(PLLQ[1:0])   分频系数:2,4,6,8

PLLCLK = Fvco  /  寄存器(RCC_PLLCFGR)(PLLR[1:0])   分频系数:2,4,6,8

STM32L41x/42x/43x/44x/45x/46x: PLLSAI1

PLLSP = Fvco  /  寄存器(RCC_PLLSAI1CFGR)(PLLSAI1PDIV[4:0])   分频系数:2 到 31

PLL48M2CLK = Fvco  /  寄存器(RCC_PLLSAI1CFGR)(PLLSAI1Q[1:0])   分频系数:2,4,6,8

PLLADC1CLK = Fvco  /  寄存器(RCC_PLLSAI1CFGR)(PLLSAI1R[1:0])   分频系数:2,4,6,8

STM32L47x/48x/49x/4ax: PLL

PLLSAI3CLK = Fvco  /  寄存器(RCC_PLLCFGR)(PLLPDIV[4:0])   分频系数:2 到 31

PLL48M1CLK = Fvco  /  寄存器(RCC_PLLCFGR)(PLLQ[1:0])   分频系数:2,4,6,8

PLLCLK = Fvco  /  寄存器(RCC_PLLCFGR)(PLLR[1:0])   分频系数:2,4,6,8

STM32L47x/48x/49x/4ax: PLLSAI1

PLLSAI1P = Fvco  /  寄存器(RCC_PLLSAI1CFGR)(PLLSAI1PDIV[4:0])   分频系数:2 到 31

PLL48M2CLK = Fvco  /  寄存器(RCC_PLLSAI1CFGR)(PLLSAI1Q[1:0])   分频系数:2,4,6,8

PLLADC1CLK = Fvco  /  寄存器(RCC_PLLSAI1CFGR)(PLLSAI1R[1:0])   分频系数:2,4,6,8

 STM32L47x/48x/49x/4ax: PLLSAI2

PLLSAI2P = Fvco  /  寄存器(RCC_PLLSAI2CFGR)(PLLSAI2PDIV[4:0])   分频系数:2 到 31

PLLADC2CLK = Fvco  /  寄存器(RCC_PLLSAI2CFGR)(PLLSAI2R[1:0])   分频系数:2,4,6,8

PLL的参数配置需要遵循一定顺序,以保证PLL能正常运行。

PLL配置(输入时钟和倍频因子的选择)必须在启用PLL之前完成。一旦启用PLL,这些参数就不能更改。

要修改PLL配置,请按以下步骤进行:

  1. 通过在时钟控制寄存器(RCC_CR)中将(PLLON)设置为0来禁用PLL。
  2. 等待(RCC_CR)(PLLRDY=0),表示PLL现在完全停止。
  3. 更改所需的参数。
  4. 通过在时钟控制寄存器(RCC_CR)中将(PLLON)设置为1来启用PLL。
  5. 等待(RCC_CR)(PLLRDY=1),表示PLL现在稳定运行。
  6. 通过在PLL配置寄存器(RCC_PLLCFGR)中配置(PLLPEN=1)(PLLQEN=1)(PLLREN=1)启用所需的PLL输出。
  7. 通过在PLLSAI1配置寄存器(RCC_PLLSAI1CFGR)中配置(PLLSAI1PEN=1)(PLLSAI1QEN=1)(PLLSAI1REN=1)启用所需的PLL输出。
  8. 通过在PLLSAI2配置寄存器(RCC_PLLSAI2CFGR)中配置(PLLSAI2PEN=1)(PLLSAI2REN=1)启用所需的PLL输出。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

btzhy

您的鼓励是我最大的动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值