• 大小: 404KB
    文件类型: .7z
    金币: 1
    下载: 0 次
    发布日期: 2021-06-02
  • 语言: 其他
  • 标签: STM32  qingxieyi  

资源简介

本资源为基于STM32的倾斜仪程序代码,包括整个工程!下载即可使用,倾斜仪的具体设计可以移步本人博客进行参考

资源截图

代码片段和文件信息

#include “delay.h“


static u8  fac_us=0; //us延时倍乘数    
static u16 fac_ms=0; //ms延时倍乘数




//初始化延迟函数
//SYSTICK的时钟固定为AHB时钟的1/8
//SYSCLK:系统时钟频率
void SysTick_Init(u8 SYSCLK)
{
SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8); 
fac_us=SYSCLK/8;
fac_ms=(u16)fac_us*1000;    
}     


//延时nus
//nus为要延时的us数.         
void delay_us(u32 nus)
{
u32 temp;       
SysTick->LOAD=nus*fac_us;  //时间加载     
SysTick->VAL=0x00;         //清空计数器
SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk ; //开始倒数   
do
{
temp=SysTick->CTRL;
}while((temp&0x01)&&!(temp&(1<<16))); //等待时间到达   
SysTick->CTRL&=~SysTick_CTRL_ENABLE_Msk; //关闭计数器
SysTick->VAL =0X00;        //清空计数器  
}

//延时nms
//注意nms的范围
//SysTick->LOAD为24位寄存器所以最大延时为:
//nms<=0xffffff*8*1000/SYSCLK
//SYSCLK单位为Hznms单位为ms
//对72M条件下nms<=1864 
void delay_ms(u16 nms)
{        
u32 temp;    
SysTick->LOAD=(u32)nms*fac_ms; //时间加载(SysTick->LOAD为24bit)
SysTick->VAL =0x00; //清空计数器
SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk ; //开始倒数  
do
{
temp=SysTick->CTRL;
}while((temp&0x01)&&!(temp&(1<<16))); //等待时间到达   
SysTick->CTRL&=~SysTick_CTRL_ENABLE_Msk; //关闭计数器
SysTick->VAL =0X00;        //清空计数器        
}


//初始化延迟函数
//当使用ucos的时候此函数会初始化ucos的时钟节拍
//SYSTICK的时钟固定为HCLK时钟的1/8
//SYSCLK:系统时钟
void delay_init()  
{

#ifdef OS_CRITICAL_METHOD  //如果OS_CRITICAL_METHOD定义了说明使用ucosII了.
u32 reload;
#endif
SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8); //选择外部时钟  HCLK/8
fac_us=SystemCoreClock/8000000; //为系统时钟的1/8  
 
#ifdef OS_CRITICAL_METHOD  //如果OS_CRITICAL_METHOD定义了说明使用ucosII了.
reload=SystemCoreClock/8000000; //每秒钟的计数次数 单位为K    
reload*=1000000/OS_TICKS_PER_SEC;//根据OS_TICKS_PER_SEC设定溢出时间
//reload为24位寄存器最大值:16777216在72M下约合1.86s左右
fac_ms=1000/OS_TICKS_PER_SEC;//代表ucos可以延时的最少单位    
SysTick->CTRL|=SysTick_CTRL_TICKINT_Msk;    //开启SYSTICK中断
SysTick->LOAD=reload;  //每1/OS_TICKS_PER_SEC秒中断一次
SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk;    //开启SYSTICK    
#else
fac_ms=(u16)fac_us*1000;//非ucos下代表每个ms需要的systick时钟数   
#endif
}









评论

共有 条评论