当前位置:   article > 正文

3.1stm32f407时钟专解,时钟配置,systick使用_stm32f407采样用哪个时钟最好

stm32f407采样用哪个时钟最好

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

  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时钟树分析

实验一:中断配置实验

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

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

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

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

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

1.cubemx创建文件

(1)RCC设置外部晶振

 (2)RCC时钟配置

(3)串口配置

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

  1. int fputc(int ch, FILE *p)
  2. {
  3. while(!(USART1->SR&(1<<7)));
  4. USART1->DR=ch;
  5. return ch;
  6. }

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

  1. void HAL_SYSTICK_Callback(void)
  2. {
  3. static uint32_t i = 0;
  4. if(i<1000){
  5. i++;
  6. }else{
  7. i=0;
  8. printf("one miao\n");
  9. }
  10. }

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

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

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

 (2)找到中断函数

 (3)找到回调函数

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

1.cubemx创建工程(同上)

2.代码

  1. void HAL_Delay(uint32_t Delay)
  2. {
  3. uint32_t temp;
  4. SysTick->LOAD = Delay * 4000;
  5. SysTick->VAL=0X00;//清空计数器
  6. SysTick->CTRL=0X01;//使能,减到零是无动作,采用外部时钟源
  7. do
  8. {
  9. temp=SysTick->CTRL;//读取当前倒计数值
  10. }while((temp&0x01)&&(!(temp&(1<<16))));//等待时间到达
  11. SysTick->CTRL=0x00; //关闭计数器
  12. SysTick->VAL =0X00; //清空计数器
  13. }
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/天景科技苑/article/detail/1018247
推荐阅读
相关标签
  

闽ICP备14008679号