赞
踩
为什么配置时钟?因为时钟配置可以提升芯片的运行效率.
RC,LC,晶体振荡器
<1>RC振荡器
电阻电容组成,所以成本低,容易受环境影响.
使用区间:刚开机准备加载外部时钟时,外部时钟出错时,临时使用
<2>石英晶体振荡器
较高精度振荡器,所以成本较高
使用区间:通信系统中用于频率发生器,为数据产生时钟信号和为特定系统提供基准信号
<1>HSI:高速内部时钟,RC振荡器,频率为16MHz;
使用区间:上述RC
<2>HSE:高速外部时钟,可接石英/陶瓷谐振器,或者接外部时钟源,频率范围为4MHz~26MHz,我们开发板是25MHz
使用区间:上述晶体
<3>LSI:低速内部时钟,RC 振荡器,频率为 32kHz 左右。供独立看门狗和自动唤醒单元使用。
使用区间:特殊外设,看门狗
<4>LSE:低速外部时钟,接频率为 32.768kHz 的石英晶体。这个主要是 RTC 的时钟源
使用区间:高精度时钟源
实验一:中断配置实验
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函数重写
- 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中断函数
(2)找到中断函数
(3)找到回调函数
实验三: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; //清空计数器
-
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。