23
2020
11

SysTick 滴答定时器

#include "stm32f10x.h"
static GPIO_InitTypeDef   GPIO_InitStructure;
#define  PB5OUT(n)   *(volatile uint32_t *)(0x42000000+((uint32_t)&GPIOB->ODR-0x40000000)*32+n*4)


void led0(void){
    //led0-->PB5
    //使能端口
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
    //初始化GPIO引脚
    GPIO_InitStructure.GPIO_Pin=GPIO_Pin_5;
    GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
    GPIO_InitStructure.GPIO_Speed= GPIO_Speed_50MHz;//高速响应
    GPIO_Init(GPIOB, &GPIO_InitStructure);
    GPIO_SetBits(GPIOB,GPIO_Pin_5);
}
int main(){
    led0();
    //例子假如
    //系统定时器的时钟源168MHz
    //只要系统定时器进行168000000个计数,就代表1秒钟时间的到达
    //只要系统定时器进行168000000/10个计数,就代表1/10秒钟时间的到达
    //只要系统定时器进行168000000/100个计数,就代表1/100秒钟时间的到达
    //所以下面那个句子也可以写成SysTick_Config(168000);
    //配置系统定时器触发1000Hz的中断
    //周期时间T=1/f=1/1000Hz=1ms
    SysTick_Config(SystemCoreClock/1000);
    while(1){
    
    }
}


void SysTick_Handler(void){
static uint32_t i=0;
    i++;
    if(i>500){
    i=0;
        //灯状态的翻转
    PB5OUT(5)^=1;//7异或 1^1=0 0^1=1 反复

    }
}


微信扫码关注

更新实时通知

« 上一篇 下一篇 »

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。