Initial import of STM32 IoT sensor node
This commit is contained in:
@@ -0,0 +1,68 @@
|
||||
#include "systick.h"
|
||||
|
||||
// 用于记住每一微妙的时钟计数
|
||||
volatile static u8 fac_us = 0;
|
||||
// 用于记住每一毫秒妙的时钟计数
|
||||
volatile static u16 fac_ms = 0;
|
||||
|
||||
// 初始化 systick
|
||||
void systick_init(void)
|
||||
{
|
||||
// 初始化 SysTick 的时钟为外部时钟
|
||||
SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8);
|
||||
fac_us = SYSCLK / 8;
|
||||
fac_ms = SYSCLK / 8 * 1000;
|
||||
}
|
||||
|
||||
// 延时 us 微秒
|
||||
void delay_us(u32 us)
|
||||
{
|
||||
// 用于保存寄存器状态
|
||||
u32 temp;
|
||||
// 设置重加载值
|
||||
SysTick->LOAD = us * fac_us;
|
||||
// 清空当前值
|
||||
SysTick->VAL = 0;
|
||||
// 使能 SysTick
|
||||
SysTick->CTRL |= 0x1;
|
||||
// 循环等待定时器到时
|
||||
do
|
||||
{
|
||||
temp = SysTick->CTRL;
|
||||
} while (!(temp & (1 << 16)) && (temp & 0x1));
|
||||
// 关闭 SysTick 定时器
|
||||
SysTick->CTRL &= ~0x01;
|
||||
// 当前计数清零
|
||||
SysTick->VAL = 0;
|
||||
}
|
||||
|
||||
// 延时 ms 毫秒
|
||||
void delay_ms(u32 ms)
|
||||
{
|
||||
// 用于保存寄存器状态
|
||||
u32 temp;
|
||||
// 设置重加载值
|
||||
SysTick->LOAD = ms * fac_ms;
|
||||
// 清空当前值
|
||||
SysTick->VAL = 0;
|
||||
// 使能 SysTick
|
||||
SysTick->CTRL |= 0x1;
|
||||
// 循环等待定时器到时
|
||||
do
|
||||
{
|
||||
temp = SysTick->CTRL;
|
||||
} while (!(temp & (1 << 16)) && (temp & 0x1));
|
||||
// 关闭 SysTick 定时器
|
||||
SysTick->CTRL &= ~0x01;
|
||||
// 当前计数清零
|
||||
SysTick->VAL = 0;
|
||||
}
|
||||
|
||||
// 延时 second 秒
|
||||
void delay_s(u32 second)
|
||||
{
|
||||
while (second--)
|
||||
{
|
||||
delay_ms(1000);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user