写一段STM32F103RCT6使用外部12MHZ晶振,系统时钟为72M,定时器3定时100MS的程序
时间: 2024-05-22 18:15:36 浏览: 88
#include "stm32f10x.h"
void TIM3_IRQHandler(void) // 定时器3中断处理函数
{
if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET) // 如果是定时器更新中断
{
// 在此处添加需要执行的定时任务代码
// ...
TIM_ClearITPendingBit(TIM3, TIM_IT_Update); // 清除中断标志位
}
}
int main(void)
{
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); // 使能定时器3时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); // 使能GPIOA时钟
GPIO_InitTypeDef GPIO_InitStructure; // 初始化GPIO结构体
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; // PA0引脚
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; // 推挽输出模式
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; // GPIO速度50MHz
GPIO_Init(GPIOA, &GPIO_InitStructure); // 初始化GPIO
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; // 初始化定时器结构体
TIM_TimeBaseStructure.TIM_Period = 7200 - 1; // 自动重载值
TIM_TimeBaseStructure.TIM_Prescaler = 10000 - 1; // 分频系数
TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; // 时钟分割
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; // 向上计数模式
TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); // 初始化定时器
TIM_ITConfig(TIM3, TIM_IT_Update, ENABLE); // 定时器3更新中断使能
NVIC_InitTypeDef NVIC_InitStructure; // 初始化中断结构体
NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn; // 定时器3中断
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; // 抢占优先级0
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; // 子优先级0
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; // 使能中断
NVIC_Init(&NVIC_InitStructure); // 初始化中断
TIM_Cmd(TIM3, ENABLE); // 启动定时器3
while (1)
{
GPIO_SetBits(GPIOA, GPIO_Pin_0); // PA0引脚输出高电平
delay_ms(500); // 延时500ms
GPIO_ResetBits(GPIOA, GPIO_Pin_0); // PA0引脚输出低电平
delay_ms(500); // 延时500ms
}
}
void delay_ms(uint16_t ms) // 延时函数
{
while (ms--)
{
for (uint16_t i = 0; i < 7200; i++);
}
}
阅读全文