Initial import of STM32 IoT sensor node

This commit is contained in:
yzfh
2026-10-19 15:47:18 +08:00
commit a51794b022
100 changed files with 46274 additions and 0 deletions
+68
View File
@@ -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);
}
}