stm32f103c8t6手动延时1ms函数
时间: 2024-10-13 09:01:18 浏览: 34
STM32F103C8T6.zip
STM32F103C8T6单片机是一款基于ARM Cortex-M3内核的微控制器,它不直接提供延迟1毫秒(ms)的函数,因为这种级别的计时通常由硬件定时器完成,以便更精确且节省CPU资源。
如果你需要实现1ms的手动延时,可以考虑使用SysTick定时器。以下是一个简单的示例,说明如何利用SysTick进行1ms的延时:
```c
#include "stm32f1xx_hal.h"
// 定义SysTick中断处理函数
void SysTick_Handler(void)
{
if (__HAL_SYSTICK_GET_COUNT() >= (SysTick_Configuration * sys_tick_period_get())) {
// 每过周期更新延时时钟计数
__HAL_SYSTICK_DECREMENT();
if (__HAL_SYSTICK_GET_COUNT() == 0) {
// 到达1ms延时期限
// 在这里添加你需要执行的延时操作
// ...
}
}
}
void Delay_ms(uint32_t ms)
{
// 设置SysTick配置,周期大约等于1ms
static uint32_t tickPeriod = HAL_RCC_GetHCLKFreq() / 1000;
SysTick_Configuration = (tickPeriod + SysTick_Configuration - 1) / tickPeriod; // 防止溢出
// 开启SysTick中断
__HAL_SYSTICK_ENABLE();
while(ms--) { // 循环等待指定时间
// 如果在此期间有其他中断发生,此循环会暂停直到下一次SysTick中断
}
// 关闭SysTick中断
__HAL_SYSTICK_DISABLE();
}
// 使用示例
int main(void)
{
...
Delay_ms(1); // 手动延时1ms
...
}
```
在这个例子中,你需要确保`SysTick_Configuration`计算得当,以便大约每1ms触发一次回调。这个函数会在每次SysTick中断时递减计数,达到0时触发延时结束。
阅读全文