新手上路
- 积分
- 33
- 金钱
- 33
- 注册时间
- 2019-4-29
- 在线时间
- 5 小时
|
1金钱
编译下载后没有反应,不知道哪里不对
电路图如上所示
代码如下:
//LED初始化函数
void LED_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;//定义结构体变量
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//使能时钟
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_1; //选择设置的IO口
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP; //设置推挽输出模式
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz; //设置传输速率
GPIO_Init(GPIOA,&GPIO_InitStructure); // 初始化GPIO
GPIO_SetBits(GPIOA,GPIO_Pin_1); //将LED端口拉高,熄灭所有LED
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_2; //选择设置的IO口
GPIO_Init(GPIOA,&GPIO_InitStructure); // 初始化GPIO
GPIO_SetBits(GPIOA,GPIO_Pin_2); //将LED端口拉高,熄灭所有LED
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_3; //选择设置的IO口
GPIO_Init(GPIOA,&GPIO_InitStructure); // 初始化GPIO
GPIO_SetBits(GPIOA,GPIO_Pin_3); //将LED端口拉高,熄灭所有LED
}
//定时器初始化函数
void TIM2_Init(void)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);//使能定时器时钟
TIM_TimeBaseInitStructure.TIM_Period=3600-1; //自动装载值
TIM_TimeBaseInitStructure.TIM_Prescaler=400-1; //分频系数
TIM_TimeBaseInitStructure.TIM_ClockDivision=TIM_CKD_DIV1;
TIM_TimeBaseInitStructure.TIM_CounterMode=TIM_CounterMode_Up; //设置向上计数模式
TIM_TimeBaseInit(TIM2,&TIM_TimeBaseInitStructure);
//配置中断
TIM_ITConfig(TIM2,TIM_IT_Trigger,ENABLE); //开启定时器中断
NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn;//定时器中断通道
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0;//抢占优先级
NVIC_InitStructure.NVIC_IRQChannelSubPriority =0; //子优先级
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道使能
NVIC_Init(&NVIC_InitStructure);
TIM_Cmd(TIM2,ENABLE); //使能定时器
}
// 中断处理函数
void TIM2_IRQHandler(void)
{
u8 i=1;
if(TIM_GetITStatus(TIM2,TIM_IT_Update))//触发中断源
{
if(i==1)
{
LED1 = !LED1;
i++;
}else if(i==2)
{
LED1 = !LED1;
LED2 = !LED2;
i++;
}else if(i==3)
{
LED2 = !LED2;
LED3 = !LED3;
i=1;
}
}
TIM_ClearITPendingBit(TIM4,TIM_IT_Update); //清除中断标志
}
void delay_ms(u32 t)
{ u16 i,j;
for(i=t;i>0;i--)
for(j=1550;j>0;j--);
}
主函数:
int main(void)
{
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //中断优先级分组 分2组
LED_Init();
TIM2_Init();
while(1){
//LED3=!LED3;
//delay_ms(1000);
}
}
|
最佳答案
查看完整内容[请看2#楼]
问题已解决,修改单片机为8MHZ(我也不知道为什么,希望懂得同学给我说一下),代码修改如下:
#include "stm32f10x.h"
#include "LED.h"
#include "TimerLED.h"
//定时器初始化函数
void TIM2_Init(void)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,EN ...
|