stm32f103延时us库代码
时间: 2024-01-05 19:02:35 浏览: 26
以下是基于STM32F103C8T6芯片的延时库代码:
```c
#include "stm32f10x.h"
void delay_us(uint32_t us)
{
uint32_t ticks;
ticks = us * (SystemCoreClock / 1000000U);
while (ticks)
{
__NOP();
ticks--;
}
}
```
使用方法:
在main函数中调用`delay_us()`函数即可实现延时,例如:
```c
int main(void)
{
while (1)
{
GPIO_SetBits(GPIOC, GPIO_Pin_13);
delay_us(500);
GPIO_ResetBits(GPIOC, GPIO_Pin_13);
delay_us(500);
}
}
```
注意:本代码中使用了CMSIS库,需要在工程中添加相应的头文件和库文件,并且在启动文件中定义SystemCoreClock变量。
相关问题
stm32f103定时器精准延时代码
根据您的问题,我可以直接回答。以下是关于 STM32F103 定时器精准延时代码的参考代码:
void delay_us(uint32_t nus){
uint32_t ticks;
uint32_t told, tnow, tcnt = 0;
uint32_t reload = SysTick->LOAD; //LOAD的值
ticks = nus * (SystemCoreClock / 1000000); //需要的节拍数
while (tcnt < ticks){
tnow = SysTick->VAL;
if (tnow != told){
if (tnow < told){
tcnt += told - tnow + reload;
} else {
tcnt += told + reload - tnow;
}
told = tnow;
}
}
}
希望可以满足您的需求。如果您有更多的问题,可以继续向我提问。
stm32F103 us级延时
在 STM32F103 微控制器中,可以使用 SysTick 定时器来实现微秒级延时。SysTick 定时器是一个24位向下计数器,可以用来生成周期性的中断。
以下是一个示例代码,实现了 1 微秒的延时功能:
```c
void delay_us(uint32_t us)
{
uint32_t ticks = us * (SystemCoreClock / 1000000); // 计算需要的 SysTick 滴答数
SysTick->LOAD = ticks - 1;
SysTick->VAL = 0;
SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk | SysTick_CTRL_ENABLE_Msk;
while((SysTick->CTRL & SysTick_CTRL_COUNTFLAG_Msk) == 0); // 等待延时时间到达
SysTick->CTRL = 0; // 关闭定时器
}
```
在这个函数中,我们首先将需要延时的微秒数转换成需要的 SysTick 滴答数,然后配置 SysTick 定时器并启动它。在等待延时时间到达时,我们轮询 SysTick 的 COUNTFLAG 标志位,直到它被置位,表示时间到达了。最后关闭定时器。