[STM8]

用外部时钟

[复制链接]
701|11
手机看帖
扫描二维码
随时随地手机跟帖
chenjunt|  楼主 | 2018-7-28 08:21 | 显示全部楼层 |阅读模式
最近在学习风驰大大的STM8开发板,外部时钟只有配置成24MHz的,请问下如果用外部时钟8MHz,该如何配置
supernan| | 2018-7-28 08:23 | 显示全部楼层
更换晶振为8M的,或者将时钟切换到HSI,再选择HISDIV为二分频

使用特权

评论回复
chenjunt|  楼主 | 2018-7-28 08:24 | 显示全部楼层

#include "sysclock.h"
static void HSE_ClockStartUpConfiguration(HSE_Clock_TypeDef HSE_Clock,HSE_ClockStartUpTime_TypeDef HSE_ClockStartUpTime);
/* 自定义新类型 */

/* 自定义宏 */
#define DEBUG
/*******************************************************************************
* 名称: HSE_ClockStartUpConfiguration
* 功能: 时钟的选择,可以实现外部的时钟切换
* 形参: HSE_Clock 外部时钟类型的选择
         HSE_ClockStartUpTime 外部时钟起振稳定时间
* 返回: 无
* 说明: 如果外部时钟是大于16MHzflash需要插入一个等待周期
         小于或者等于16MHz则不需要
         这些设置写进flash,运行一次即可,在调试的时候运行即可
               
******************************************************************************/
static void HSE_ClockStartUpConfiguration(HSE_Clock_TypeDef HSE_Clock,HSE_ClockStartUpTime_TypeDef HSE_ClockStartUpTime)
{
  FLASH_Unlock(FLASH_MEMTYPE_DATA);/*要对选项字节写操作,必须要先解锁FLASH*/
  while(!(FLASH->IAPSR & FLASH_IAPSR_DUL));/*等待解锁完毕*/
/*如果外部时钟是大于16MHz或者小于等于24MHz,flash需要插入一个等待周期,小于或者等于16MHz则不需要*/
  if(HSE_Clock==HSE_24MHz)   
  FLASH_ProgramOptionByte(FLASH_WAIT_STATES_ADDRESS,HSE_Clock);
  FLASH_ProgramOptionByte(HSE_CLOCK_STARTUP_ADDRESS,HSE_ClockStartUpTime);
  /*外部时钟启动稳定周期*/
  FLASH_Lock(FLASH_MEMTYPE_DATA);/*操作完要加锁*/
   
}
/*******************************************************************************
* 名称: DefaultSystemClockForHSI
* 功能: 恢复默认HSI功能的设置
* 形参: 无     
* 返回: 无
* 说明: 这些设置写进flash,运行一次即可,在调试的时候运行即可
******************************************************************************/
void DefaultSystemClockForHSI(void)
{
  FLASH_Unlock(FLASH_MEMTYPE_DATA);/*要对选项字节写操作,必须要先解锁FLASH*/
  while(!(FLASH->IAPSR & FLASH_IAPSR_DUL));/*等待解锁完毕*/
  FLASH_EraseOptionByte(FLASH_WAIT_STATES_ADDRESS);/*恢复HSI时钟*/
  FLASH_EraseOptionByte(HSE_CLOCK_STARTUP_ADDRESS);
  FLASH_Lock(FLASH_MEMTYPE_DATA);/*操作完要加锁*/
}


/*******************************************************************************
* 名称: Sysclock_Init
* 功能: 设置系统时钟频率
* 形参: 无
* 返回: 无
* 说明: 时钟选择
         如果选择外部24MHz主时钟的,外部不是24M的话
         把#define HSE_24M  HSE_VALUE注释掉即可,
         如果不需要切换到外部时钟,把#define __HSE_VALUE  HSE_VALUE
         注释掉即可
******************************************************************************/
void SystemClock_Init(SystemClock_TypeDef sysclk)
{

   if(sysclk==HSE_Clock)/*选用外部时钟*/
   {
     #ifdef DEBUG
     HSE_ClockStartUpConfiguration(HSE_24MHz,HSECNT_8CLK);
     #endif
     while (!CLK_ClockSwitchConfig(CLK_SWITCHMODE_AUTO, CLK_SOURCE_HSE, DISABLE,\
            CLK_CURRENTCLOCKSTATE_DISABLE));
     /*切换到外部时钟,并等待时钟却换成功*/
   }
   else
   {
     #ifdef DEBUG
     DefaultSystemClockForHSI();
     #endif
     CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV1);
   }

}

使用特权

评论回复
xxrs| | 2018-7-28 08:26 | 显示全部楼层

什么意思程序?

使用特权

评论回复
chenjunt|  楼主 | 2018-7-28 08:27 | 显示全部楼层
如何修改

使用特权

评论回复
houcs| | 2018-7-28 08:29 | 显示全部楼层

void main()
{
        CLK->ECKR = 0x01;   //enable external crystal
        CLK->SWCR = 0x02;  //switch change enable
        CLK->SWR = 0xB4;   //set external crystal
        while((CLK->SWCR & 0x08)==0); //wait change finished
        CLK->SWCR = 0xFD;

        //CLK_CKDIVR= 1;        //2,4,8,16,...24MHz 不能分频为8MHz
        //直接使用外部8MHz晶体

        while(1)
        {
                ;
        }
}

使用特权

评论回复
liuzaiy| | 2018-7-28 08:30 | 显示全部楼层
楼主最好看下STM8的相关寄存器,就知道时钟怎么设置了;

使用特权

评论回复
yinxiangh| | 2018-7-28 08:34 | 显示全部楼层
在程序中定义HSE为8000000

使用特权

评论回复
yinxiangh| | 2018-7-28 08:36 | 显示全部楼层
将时钟切换到HSI,再选择HISDIV为二分频

使用特权

评论回复
pangb| | 2018-7-28 08:37 | 显示全部楼层
设置一下,有一个hse定义成8M就行了

使用特权

评论回复
chenjunt|  楼主 | 2018-7-28 08:38 | 显示全部楼层

其实还是不大明白,我再琢磨琢磨吧,多谢了哈,结贴了先

使用特权

评论回复
Soraka| | 2018-7-30 18:36 | 显示全部楼层
应该是分频就可以了

使用特权

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

本版积分规则

718

主题

7868

帖子

5

粉丝