获取linux滴答时钟,STM32上的滴答时钟

您好源自个,我现在急需要使用滴答时钟做精准的延时函数,可是我按照滴答时钟的操作手册初始化了,可是没有办法用,我找了很久没有查查处原因,希望能够指点一下。下面是我写的代码。

#include "stm32f10x.h"

#define    SysTick_CTRL   0xE000E010

#define    SysTick_LOAD  0xE000E014

#define    SysTick_VAL    0xE000E018

u32 f_us=0;

u32 f_ms=0;

//滴答时钟的初始化

void delay_init(u8 SYSCLK)

{

SysTick->CTRL&=0xfffffffb;//bit2清空,选择外部时钟  HCLK/8

f_us=SYSCLK/8;

f_ms=(u16)f_us*1000;

}

//延时毫秒

void delay_ms(u16  nms)

{

u32 tp;

SysTick->LOAD=(u32)nms*f_ms;//时间加载(SysTick->LOAD为24bit)

SysTick->VAL =0x00;           //清空计数器

SysTick->CTRL=0x01 ;          //开始倒数

do

{

tp=SysTick->CTRL;

}

while(tp&0x01&&!(tp&(1<<16)));//等待时间到达

SysTick->CTRL=0x00;       //关闭计数器

SysTick->VAL =0X00;       //清空计数器

}

//延时微秒

y_us(u32 nus)

{

u32 tp;

SysTick->LOAD=nus*f_us; //时间加载

SysTick->VAL=0x00;        //清空计数器

SysTick->CTRL=0x01 ;      //开始倒数

do

{

tp=SysTick->CTRL;

}

while(tp&0x01&&!(tp&(1<<16)));//等待时间到达

SysTick->CTRL=0x00;       //关闭计数器

SysTick->VAL =0X00;       //清空计数器

}

int mian(void)

{

GPIO_InitTypeDef GPIO_InitStructure;

RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOC, ENABLE );

SystemInit();

//滴答时钟初始化

delay_init();

//LED初始化

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP ;   //推挽输出

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_Init(GPIOC, &GPIO_InitStructure);

while(1)

{

delay_ms(1000);

GPIO_SetBits(GPIOC,GPIO_pin_9);//灯亮

delay_ms(1000);

GPIO_ResetBits(GPIOC,GPIO_Pin_9);灯灭

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值