当前位置: 代码迷 >> 单片机 >> STM32怎么使用LSE时钟
  详细解决方案

STM32怎么使用LSE时钟

热度:75   发布时间:2016-04-28 15:43:59.0
STM32如何使用LSE时钟.
STM32如何打开LSE时钟.

开发板是万利公司的STM32F107VC-PKT.
HSE是25Mhz晶振
LSE是32.768Mhz晶振
使用IAR的编译器.
代码如下:
 
BIT6 EQU 0x00000040 ;字第6个位为1
RCC_CR EQU 0x40021000 ;时钟控制寄存器
RCC_CFGR EQU 0x40021004 ;时钟配置寄存器
RCC_CFGR2 EQU 0x4002102C ;时钟配置寄存器2
RCC_CIR EQU 0x40021008 ;时钟中断寄存器
RCC_AHBRSTR EQU 0x40021028 ;AHB外设时钟复位寄存器
RCC_APB2RSTR EQU 0x4002100C ;APB2外设复位寄存器
RCC_APB1RSTR EQU 0x40021010 ;APB1外设复位寄存器
RCC_AHBENR EQU 0x40021014 ;AHB外设使能寄存器
RCC_APB2ENR EQU 0x40021018 ;APB2外设使能寄存器
RCC_APB1ENR EQU 0x4002101C ;APB1外设使能寄存器
RCC_BDCR EQU 0x40021020 ;备份域控制寄存器
RCC_CSR EQU 0x40021024 ;控制/状态寄存器
__iar_program_start ;CPU复位后从这里开始执行
main
  ;打开HSE
  LDR R0, =RCC_CFGR2
  MOVW R1, #0x0001
  STR R1, [R0] ,#0 ;设置PREDIV1为2分频=12.5MHz
  MOV R1, #0
  LDR R1,[R0] ;读取配置寄存器2值
   
  LDR R0, =RCC_CFGR
  MOVW R1, #0x0401 ;设置为HSE时钟为系统时钟
  ;MOVW R1, #0x0402 ;设置AHB不分频(50M),APB1-2分频(25M),APB2-不分频(50M),SW-0x01设置为使用HSE时钟,0x02设置PLL时钟
  MOVT R1, #0x0009 ;0x09是位23:16,转换B00001001,设置PLLMUL为4倍频=12.5*4=50MHz,PLLSRC=1
  ;MOVT R1, #0x001D ;0x15是位23:16,转换B00011101,设置PLLMUL为9倍频=12.5*7=50MHz,PLLSRC=1,触发中断
  STR R1, [R0] ,#0
  MOV R1, #0
  LDR R1,[R0] ;读取配置寄存器值
   
  LDR R0, =RCC_CR
  MOVT R1, #0x0109  
  STR R1, [R0] ,#0 ;配置好参数,最后使能PLLON和HSEON,并打开CSSON
  MOV R1, #0
  LDR R1,[R0] ;读取控制寄存器值
   
  ;开启LSE,为什么这里LSE始终无法就绪????
  LDR R0, =RCC_BDCR
  MOV R1, #0x0001  
  STR R1, [R0] ,#0 ;设置LSEON为开启状态
   
 
   
  ;HSE时钟,可查看RCC_CFGR寄存器中的SWS和SW位
  ;LSE时钟,可查看RCC_BDCR寄存器中的LSERDY位始终不能就绪.
   
exit
  B exit ;程序执行完毕,进入死循环,等待触发中断
   
  END ;文件结束,任何函数都不能在End后面,否则B调用就找不到
 
通过查看SWS位看到HSE就绪.
但是LSERDY始终不能就绪,不知道是设置那个寄存器出问题了.

------解决方案--------------------
备用区域控制寄存器(RCC_BDCR)的LSEON用于控制LSE的开启或关闭


参看《STM3210x技术参考手册》中关于这个寄存器的用法

------解决方案--------------------
探讨

我就是参照:《STM3210x技术参考手册》使用LSEON状态来开启LSE的.
但总是无法使用,所以才疑惑.

------解决方案--------------------
RCC_BDCR在备份域里,上电默认写保护。因此,这些位在复位后处于写保护状态,只有在电源控制寄存器(PWR_CR) 中的DBP位置’1’ 后才能对这些位进行改动
------解决方案--------------------
看看有没有可能是晶振的问题,有些晶振在STM32下无法起振。
------解决方案--------------------
看看有没有可能是晶振的问题,有些晶振在STM32下无法起振。
------解决方案--------------------
提醒一下 有个FLASH的 时间参数要设置 程序才能运行的下去