STM32F103RC72Mdelay代码
时间: 2023-09-24 09:04:23 浏览: 71
以下是一个简单的使用STM32F103RC的定时器延迟函数的示例代码:
```c
#include "stm32f10x.h"
void delay_ms(uint32_t ms) {
// 使用定时器3进行延迟
RCC->APB1ENR |= RCC_APB1ENR_TIM3EN;
TIM3->PSC = SystemCoreClock / 1000 - 1; // 设置预分频值为1ms
TIM3->ARR = ms; // 设置计数值
TIM3->CR1 |= TIM_CR1_URS; // 只有在更新事件时才触发中断
TIM3->DIER |= TIM_DIER_UIE; // 使能更新中断
NVIC_EnableIRQ(TIM3_IRQn); // 使能TIM3中断
TIM3->CR1 |= TIM_CR1_CEN; // 启动定时器
// 等待延时完成
while (TIM3->CR1 & TIM_CR1_CEN);
TIM3->CR1 &= ~TIM_CR1_CEN; // 关闭定时器
}
void TIM3_IRQHandler(void) {
if (TIM3->SR & TIM_SR_UIF) {
TIM3->SR &= ~TIM_SR_UIF; // 清除中断标志位
}
}
int main(void) {
// 初始化系统时钟和GPIO
while (1) {
// 延时1秒
delay_ms(1000);
// 执行其他操作
}
}
```
这个例子中,我们使用定时器3来实现延时功能。在`delay_ms`函数中,我们配置了定时器的预分频和计数值,然后启动定时器并等待定时器计数完成。在定时器中断处理函数`TIM3_IRQHandler`中,我们清除了中断标志位。在主函数中,我们通过调用`delay_ms`函数来实现延时1秒的效果。你可以根据自己的需求进行修改和扩展。
阅读全文