物联网嵌入式

day05笔记

一、内容回顾吧 

        1、GPIO的固件库函数:

                GPIO_Init

                GPIO_Delint  复位

                GPIO_Setbits

                GPIO_Resetbits

                GPPIO_ReadInputDatabits

        引用:&          解引用:*

        2、会用一函数的:功能        参数        返回值

                man  3  c库函数

                man   2   系统调用

                man   1   命令

二、定时器

延时分两种:

粗略延时:用for  while 可实现

精确延时:通过定时器实现

在STM32中有很多种定时器资源:

24_downcounter        2*wdg        4*16bits        定时器RTC

定时器可以分为两类:普通定时器和特殊定时器(wdg        RTC)

watch dog 看门狗除了提供计时功能外,还提供了让系统重启复位的功能

看门狗可以帮助程序监测硬件的一场状态,可以监测软件有没有跑飞

RTC   real  time  clock  实时时钟

无论是普通定时器还是特殊定时器,决定定时时长的因素有两个:

时钟频率        计数值

1s=1000ms=1000000us=1000000000ns

三、系统定时器

24-downcounter指代系统定时器(systimer|systick)

系统时钟不是由ST提供,而是由ARM core提供的

1、STM32F103RBT6提供了几种基础时钟源

        五种

        HSI:系统内部高速时钟 8MHz(internal)(high)

        HSE:系统外部高速时钟        (external)     (low)

        LSI:系统内部低速时钟

        LSE:系统外部低速时钟        提供基础的时钟频率

        PLL:倍频器        乘法器        起到放大频率的作用

        osc   晶振

2、系统时钟的时钟源由哪个基础时钟源提供时钟频率:HSE

        HSI:基础时钟频率是8MHz,经过PLL的倍频可以达到72MHz

        PLL:时钟源本身并不提供基础时钟频率

        HSE:基础时钟频率是 4~16MHz,经过PLL的倍频可以达到72MHz

        因为系统内部的晶振频率往往不稳定,所以系统时钟sysclk的基础时钟频率由HSE提供!

将来开发板上的所有外设的时钟频率,都是由SYSCLK经过AHB的分频,在经过APB进一步分频得到

3、系统定时器的寄存器(32中所以寄存器都是32位的)

a、系统定时器一共有四个

        CSR:控制及状态寄存器  0xe000e01c
            [0]位:  0/1  禁止/使能计数器 
            [1]位:  0/1  不/上报中断信号给CPU (计数值减小到0的时候)
            [2]位:  0/1  选择HSE/HSI做为时钟源 
            
            [16]位: 1/0  当计数器的计数值减到/没减到 0

        RVR:重装载值寄存器

            保存重装载值, 当CVR被使能且计数值减小到0时, 将重装值放入到当前值寄存器中
            [23:0] 0X000000 ~ 0xFFFFFF

        CVR:当前值寄存器

                当前值寄存器, 保存的是当前值, 一直做递减 

                写操作会影响CSR bit16 ---> 0 

        CALL:校准寄存器

b、哪几个寄存器决定计数值范围

        RVR:重装载值寄存器

        CVR:当前值寄存器

c、系统定时器的定时范围:0~2^24-1(即0~16M-1)

字节对齐:

4字节对齐
        struct node{
            char data;
            int a;
            double b;
            short c;
        };
        struct node node1;
        node ---> sizeof (node1) ----> 20 
        
        struct Node{
            char data;
            short c;
            int a;
            double b;
        };
        Node ---> 16

4. 系统定时器的固件库
        打开《STM32RBT6\DataSheet\STM32\STM32固件库使用手册(中文版).pdf》  
        注意:STM32的官方固件库存在两个短板:
        
        a) 官方固件库默认开启了系统定时器的中断 (无需再去读CSR 的bit16)
        b) 官方固件库对系统定时器只有打开没有关闭, 没有达到即开即用 
        
    实验步骤:
    1. copy 一份04button的代码, 重命名为05systick 
    2. 进入到05systick的project中, 打开项目工程 
    3. 双击fwlib, 将固件库中的misc.c 添加到fwlib中 (misc.c 是和arm core相关的)
    
    
    9000
    9000000hz 
    每隔1ms给cpu报一次系统定时器中断
    
    中断信号一到来, 会打断cpu的执行, cpu要跳转到某个位置去执行 

在startup_stm32f10x_md.s中,维护了一张异常向量表,保存了各个中断的入口

总结:
    由于stm32f10x官方固件对系统定时器的中断默认使能了, 而且只有打开
    每隔一段时间, 系统定时器就会给cpu上报中断信号 
    cpu一旦接收到中断信号, 就会打断cpu的执行, cpu跳转到异常向量表中去执行 
    到systick_IRQHandler 中执行 

设定的systick的时钟频率是9MHz, 设定的计数值是9000 故, 每隔1ms,systick就会上报一次中断给cpu 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值