物联网嵌入式

day06笔记

一、回顾

系统定时器的时钟频率由系统sysclk提供,sysclk时钟的时钟频率由HSE提供

clock  tree:由HSE经过PLL的倍频给sysclk ,提供72MHz的时钟频率

分频器prescaler

sysclk--->AHB bus---> APB--->peripheral

官方固件库中对系统定时器 :

1、只有打开没有关闭

2、默认使能了系统定时器的中断

中断---》 打断cpu的执行 ---》startup_stm32f10x_md.s  ---> 异常向量表(函数的入口地址) 
    xxxxx_IRQHandler ----> SysTick_IRQHandler (注意:至此所有的跳转都是硬件上自动完成的, 无需软件上的参与)
    ---》 timing_delay ---> main.c ---> flag ---> mydelay (ms) -->  flag  = ms 

二 、系统定时器想要即开即用
    
    原因:stm32f系列的开发板, 默认只有打开没有关闭定时器的功能 
    
    解决方案:操作系统定时器的三个寄存器 
    delay.c delay.h 
    
    培养自己读代码的能力 
    读懂delay.c 的代码
    
    实验步骤:
    1. copy一份05systick,重命名为06delay 
    2. 进入到06delay的mylib中, 将delay.c 和delay.h拷贝进来
    3. 打开06delay的项目工程 
    
    想要的是, 系统定时器打开即开即用 

四、位带操作

1、各种类型变量在内存中的位置:

        栈:局部变量        函数参数        函数返回值

        数据段(全局区、静态区):静态局部变量        全局变量        

        堆:动态申请变量

        未初始化的全局变量在数据段的bss段中分配空间

2、将寄存器上的24位置1,25位清0

*(int *)0xc001c200 |=(1<<24);

*(int *)0xc001c200 &=~(1<<25)

置1就是或等,清0就是与等非

企业中标准做法:

*(volatile int *)0xc001c200 |=(1<<24);

*(volatile int *)0xc001c200 &=~(1<<25);

volatile:cpu每次取变量的值时,不再去缓存中曲奇备份,而是每次都小心翼翼的从内存中取

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值