不用晶振,STM32内部HSI时钟的倍频使用

发布者:JoyfulHearted最新更新时间:2018-06-26 来源: eefocus关键字:晶振  STM32  内部HSI时钟  倍频使用 手机看文章 扫描二维码
随时随地手机看文章

博主最近用STM32F1系列单片机做一个触摸屏USB鼠标,考虑不用外部晶振而使用STM32内部8MHz HSI RC作为时钟源。由于USB协议规定了48MHz 的USB时钟,故必须对HIS作PLL倍频处理后得到PLLCLK作为STSCLK时钟。时钟关系见如下STM32F1时钟树:


类比正点原子STM32F1寄存器版本使用外部晶振的时钟初始化函数,改动得到使用HSI作为时钟源,SYSCLK为48MHz的初始化代码:

void Stm32_Clock_Init(u8 PLL)  

{  

    unsigned char temp=0;  

    MYRCC_DeInit();       //复位并配置向量表  

    RCC->CR|=0x00000001;  //内部高速时钟使能HSION  

    while(!(RCC->CR>>1));//等待内部时钟就绪  

    RCC->CFGR=0X00000400; //APB1=DIV2;APB2=DIV1;AHB=DIV1;  

    PLL-=2;//抵消2个单位  

    RCC->CFGR|=PLL<<18;   //设置PLL值 2~16  

    RCC->CFGR|=0<<16;    //PLLSRC ON  HSI经2分频后作为PLL输入时钟  

    FLASH->ACR|=0x32;      //FLASH 2个延时周期  

  

    RCC->CR|=0x01000000;  //PLLON  

    while(!(RCC->CR>>25));//等待PLL锁定  

    RCC->CFGR|=0x00000002;//PLL作为系统时钟  

    while(temp!=0x02)     //等待PLL作为系统时钟设置成功  

    {  

    temp=RCC->CFGR>>2;  

    temp&=0x03;  

    }  

}  



其中MYRCC_DeInit()代码如下:


void MYRCC_DeInit(void)  

{     

    RCC->APB1RSTR = 0x00000000;//复位结束               

    RCC->APB2RSTR = 0x00000000;   

        

    RCC->AHBENR = 0x00000014;  //睡眠模式闪存和SRAM时钟使能.其他关闭.       

    RCC->APB2ENR = 0x00000000; //外设时钟关闭.              

    RCC->APB1ENR = 0x00000000;     

    RCC->CR |= 0x00000001;     //使能内部高速时钟HSION                                                                  

    RCC->CFGR &= 0xF8FF0000;   //复位SW[1:0],HPRE[3:0],PPRE1[2:0],PPRE2[2:0],ADCPRE[1:0],MCO[2:0]                     

    RCC->CR &= 0xFEF6FFFF;     //复位HSEON,CSSON,PLLON  

    RCC->CR &= 0xFFFBFFFF;     //复位HSEBYP            

    RCC->CFGR &= 0xFF80FFFF;   //复位PLLSRC, PLLXTPRE, PLLMUL[3:0] and USBPRE   

    RCC->CIR = 0x00000000;     //关闭所有中断         

    //配置向量表                 

#ifdef  VECT_TAB_RAM  

    MY_NVIC_SetVectorTable(0x20000000, 0x0);  

#else     

    MY_NVIC_SetVectorTable(0x08000000,0x0);  

#endif  

}  

MY_NVIC_SetVectorTable()代码如下:


void MY_NVIC_SetVectorTable(u32 NVIC_VectTab, u32 Offset)      

{          

    SCB->VTOR = NVIC_VectTab|(Offset & (u32)0x1FFFFF80);//设置NVIC的向量表偏移寄存器  

    //用于标识向量表是在CODE区还是在RAM区  

}  

(1)使用时在main()函数中应写成:Stm32_Clock_Init(12),即8/2*12=48MHz.


(2)为使delay_ms()等函数时钟准确,应在system_stm32f10x.c中将


(3)#define SYSCLK_FREQ_48MHz  48000000解除屏蔽


(4)同时要注意在USB时钟初始化函数中不再对PLL时钟分频。即时钟配置寄存器(RCC_CFGR)第22位应设置为1


(5)最后,内部时钟要想正确使用,需要在启动.s文件中屏蔽sysinit


关键字:晶振  STM32  内部HSI时钟  倍频使用 引用地址:不用晶振,STM32内部HSI时钟的倍频使用

上一篇:stm32F051 HSI 时钟作为主时钟
下一篇:STM32F103 使用HSI配置系统时钟为64MHZ

推荐阅读最新更新时间:2024-03-16 16:07

STM32笔记——GPIO
GPIO简介 GPIO是通用输出输入端口的简称,简单来说就是STM32可控制的引脚,STM32芯片的GPIO引脚与外部设备连接起来,从而实现与外部通讯、控制以及数据采集功能。 GPIO的基本结构 1、保护二极管与上下拉电阻 当外部输入电压高于VDD的电压时,上方的保护二极管导通,当外部输入电压底于Vss的电压时,上方的保护二极管导通,防止不正常电压引入芯片导致芯片烧毁。 2、P-MOS管和N-MOS管 在输出模式部分,线路经过一个由 P-MOS 和 N-MOS 组成的结构,这个结构使其拥有 推挽输出 和 开漏输出 的功能。 3、TTL肖特基触发器 4、IO耐压 STM32是一款3.3V电压的芯片,I
[单片机]
<font color='red'>STM32</font>笔记——GPIO
Stm32使用Usart代码例子轮询、中断、DMA
/* 转载请注明出处:tedeum.iteye.com / 首先是不使用中断的方法使用usart1,管脚pa9,pa10,此方法已在f3discovery上验证通过,来源:https://my.st.com/public/STe2ecommunities/mcu/Lists/cortex_mx_stm32/Flat.aspx?RootFolder=%2Fpublic%2FSTe2ecommunities%2Fmcu%2FLists%2Fcortex_mx_stm32%2Fusart%20code&FolderCTID=0x01200200770978C69A1141439FE559EB459D7580009C4E1
[单片机]
<font color='red'>Stm32</font><font color='red'>使用</font>Usart代码例子轮询、中断、DMA
大联大友尚集团推出基于ST STM32 Cortex-M4(STM32F4 or L4)的码表
大联大友尚集团推出基于ST STM32 Cortex-M4(STM32F4 or L4)的 2021年4月20日,致力于亚太地区市场的领先半导体元器件分销商---大联大控股宣布,其旗下友尚推出基于意法半导体(ST) STM32 Cortex-M4(STM32F4 or L4)的码表方案。 在单片机系统上实现图形界面,最简单是使用串口屏的方式,但是在体积有限的手持应用中,串口屏显的体积与适配性往往不能适应需求,这就需要使用GUI框架来完成图形界面。在单片机领域,TouchGFX是一种面向STM32微控制器优化的高级免费图形软件框架。 图示1-大联大友尚推出基于ST STM32 Cortex-M4(STM32F4 o
[单片机]
大联大友尚集团推出基于ST <font color='red'>STM32</font> Cortex-M4(STM32F4 or L4)的码表
STM32单片机的ISP一键下载
ISP就是In System Programming在线系统编程,最常用的就是通过单片机的串口将程序HEX文件下载到内部FLASH中,单片机重启时就执行内部FLASH中的程序。根据STM32的数据手册,STM32的启动方式和BOOT引脚有关 MCUISP软件是STM32单片机ISP下载程序的软件,就像我们用STC单片机ISP下载程序时通过STCISP软件一样,下载程序时的步骤都是类似的,无非就是选择好串口和波特率,加载HEX文件,选择附加选项后再烧录程序即可。 ISP普通烧录 根据上表所示,我们用STM32的串口下载程序的步骤为: 1.电脑通过USB线连接STM32的串口(因为在STM32开发板上已经设计了USB转串口电路,常
[单片机]
stm32存储结构& 存储器映射
1 STM32系统结构 要想深刻理解STM32的存储器,需要首先知道STM32的系统结构。 如Figure 1,是STM32系统结构框图。 根据STM32 Reference manual (RM0008)中的描述,如图: 可以得知STM32系统结构的组成,每一个模块更为详细的内容,请参考相关文档。 RM0008文档中可以看出,STM32采用的是Cortex-M3内核,因此,有必要了解Cortex-M3的存储器结构。 图中还可以看出,Cortex-M3是通过各个总线和Flash、SROM相连接的。 2 STM32内核(Cortex-M3)的结构 以下是Cortex-M3模块框图: 该Co
[单片机]
<font color='red'>stm32</font>存储结构& 存储器映射
STM32——FlagStatus与ITStatus
FlagStatus与ITStatus eg: FlagStatus USART_GetFlagStatus(); //获取状态标志位 void USART_ClearFlag(); //清除状态标志位 ITStatus USART_GetITStatus(); //获取中断状态标志位 void USART_ClearITPendingBit(); //清除中断状态标志位 FlagStatus 返回值是中断标志位状态(读SR寄存器) 该函数用于检测串口中断标志位的状态。 在没有使能相应的中断函数时,通常使用该函数来判断标志位是否置位。 ITStatus 返回值是中断发生与否的判断(读CR寄存器)
[单片机]
stm32启动文件 startup_stm32f10x_hd.s
;* 文件名 : startup_stm32f10x_hd.s ;* 库版本 : V3.5.0 ;* 说明: 此文件为 STM32F1 0x高密度设备的MDK工具链的启动文件 ;* 该模块执行以下操作: ;* -设置初始堆栈指针(SP) ;* -设置初始程序计数器(PC)为复位向量,并在执行main函数前初始化系统时钟 ;* -设置向量表入口为异常事件的入口地址 ;* -复位之后处理器为线程模式,优先级为特权级,堆栈设置为MSP主堆栈 ;* Stack_Size EQU 0x00000200 ;定义堆栈的大小 ;AREA 命令指示汇编器汇编一个新的代码段或数据段。 ;段是独立的、指定的、不可见
[单片机]
<font color='red'>stm32</font>启动文件 startup_stm32f10x_hd.s
基于STM32模拟UART串口通信
UART工作原理 UART即通用异步收发器,是一种串行通信方式。数据在传输过程中是通过一位一位地进行传输来实现通信的,串行通信方式具有传输线少,成本底等优点,缺点是速度慢。串行通信分为两种类型:同步通信方式和异步通信方式。 但一般多用异步通信方式,主要因为接受和发送的时钟是可以独立的这样有利于增加发送与接收的灵活性。异步通信是一个字符接着一个字符传输,一个字符的信息由起始位、数据位、奇偶校验位和停止位组成。 每一个字符的传输靠起始位来同步,字符的前面一位是起始位,用下降沿通知收方开始传输,紧接着起始位之后的是数据位,传输时低位在前高位在后,字符本身由5~8位数据位组成。 数据位后面是奇偶校验位,
[单片机]
基于<font color='red'>STM32</font>模拟UART串口通信
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved