3.1stm32f407时钟专解,时钟配置,systick使用

为什么配置时钟?因为时钟配置可以提升芯片的运行效率.

3.1stm32f407时钟专解,时钟配置,systick使用_第1张图片

  1. 常见振荡器

RC,LC,晶体振荡器

<1>RC振荡器

电阻电容组成,所以成本低,容易受环境影响.

使用区间:刚开机准备加载外部时钟时,外部时钟出错时,临时使用

<2>石英晶体振荡器

较高精度振荡器,所以成本较高

使用区间:通信系统中用于频率发生器,为数据产生时钟信号和为特定系统提供基准信号

  1. Stm32时钟源

<1>HSI:高速内部时钟,RC振荡器,频率为16MHz;

使用区间:上述RC

<2>HSE:高速外部时钟,可接石英/陶瓷谐振器,或者接外部时钟源,频率范围为4MHz~26MHz,我们开发板是25MHz

使用区间:上述晶体

<3>LSI:低速内部时钟,RC 振荡器,频率为 32kHz 左右。供独立看门狗和自动唤醒单元使用。

使用区间:特殊外设,看门狗

<4>LSE:低速外部时钟,接频率为 32.768kHz 的石英晶体。这个主要是 RTC 的时钟源

使用区间:高精度时钟源

  1. stm32时钟树分析

3.1stm32f407时钟专解,时钟配置,systick使用_第2张图片

实验一:中断配置实验

  1. 要求:分别观察HSI(初始高速内部时钟),HSE(自己设置高速外部时钟)对程序运行速度的影响
  2. 配置

2.1 Rcc->HSI设置为Crystal/Ceramic Res onator(晶振)

3.1stm32f407时钟专解,时钟配置,systick使用_第3张图片

2.2 下图为时钟设置界面步骤(点HSE-->/25-->*336-->/2-->点PLLCLK-->APB1为/4-->APB2为/2)

3.1stm32f407时钟专解,时钟配置,systick使用_第4张图片

时钟设置,这样设置时程序的频率正好达到最高,程序运行速度最快

实验二. systick定时器使用(串口一秒发送一个数据)

1.cubemx创建文件

(1)RCC设置外部晶振

3.1stm32f407时钟专解,时钟配置,systick使用_第5张图片

 (2)RCC时钟配置

3.1stm32f407时钟专解,时钟配置,systick使用_第6张图片

(3)串口配置

3.1stm32f407时钟专解,时钟配置,systick使用_第7张图片

2.步骤:
(1)print函数重写

int fputc(int ch, FILE *p)

{

while(!(USART1->SR&(1<<7)));

USART1->DR=ch;

return ch;

}

 (2)找到systick的回调函数,重写中断函数(一千次中断printf一次)

void HAL_SYSTICK_Callback(void)
{
	static uint32_t i = 0;
	if(i<1000){
		i++;
	}else{
		i=0;
		printf("one miao\n");
	}
}

(3)结果:间断1秒左右print一次

3.补充,寻找systick回调函数

(1)startup...xx.s中寻找systick中断函数

3.1stm32f407时钟专解,时钟配置,systick使用_第8张图片

 (2)找到中断函数

3.1stm32f407时钟专解,时钟配置,systick使用_第9张图片

 (3)找到回调函数

3.1stm32f407时钟专解,时钟配置,systick使用_第10张图片

实验三:systick仿写Hal_delay()函数

1.cubemx创建工程(同上)

2.代码

void HAL_Delay(uint32_t Delay)
 
{
 
uint32_t temp;
 
SysTick->LOAD = Delay * 4000;
 
SysTick->VAL=0X00;//清空计数器
 
SysTick->CTRL=0X01;//使能,减到零是无动作,采用外部时钟源
 
do
 
{
 
  temp=SysTick->CTRL;//读取当前倒计数值
 
}while((temp&0x01)&&(!(temp&(1<<16))));//等待时间到达
 
     SysTick->CTRL=0x00; //关闭计数器
 
    SysTick->VAL =0X00; //清空计数器
 
}    

你可能感兴趣的:(二.stm32F407学习,stm32,单片机,嵌入式硬件)