打印

STM32 LSE时钟打开问题

[复制链接]
5621|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
gxgclg|  楼主 | 2012-4-25 17:04 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
开发板是万利公司的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始终不能就绪,不知道是设置那个寄存器出问题了.
沙发
baidudz| | 2012-4-25 17:15 | 只看该作者
备用区域控制寄存器(RCC_BDCR)的LSEON用于控制LSE的开启或关闭,看看技术手册

使用特权

评论回复
评分
参与人数 1威望 +1 收起 理由
yanjinbin0 + 1
板凳
yanjinbin0| | 2012-4-26 08:50 | 只看该作者
看代码的这段:
;开启LSE,为什么这里LSE始终无法就绪????
  LDR R0, =RCC_BDCR
  MOV R1, #0x0001   
  STR R1, [R0] ,#0 ;设置LSEON为开启状态
这里就是使用RCC_BDCR的LSEON位来打开LES的.
但就是设置了LESON也无法打开让LES就绪所以才疑问.

使用特权

评论回复
地板
luka| | 2012-6-29 18:26 | 只看该作者
你的问题解决了吗?
我现在也遇到这个问题。LSERDY总是无法就绪,导致程序陷入死循环

使用特权

评论回复
5
zh5202| | 2012-6-30 16:40 | 只看该作者
LSE是低速外部输入频率,且必须是32.768KHz的频率才行的哦。
在启动LSE之前,你也要设置LSEBYP位选择是LSE时钟是否旁路的。
你所使用的是外部晶振,还是旁路晶振?是不是用的32.768KHz的输入?
个人觉得这个可能是问题所在。。。

使用特权

评论回复
6
yinguilai| | 2015-11-10 13:56 | 只看该作者
我的也已经就绪,但是就是用示波器测不到晶振,请问是怎么回事呢??

使用特权

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

本版积分规则

177

主题

1653

帖子

1

粉丝