谁能帮咱看看差在哪
我想用TIM1的最基本的定时器做延时用,打算用延时的方式控制IO输出方波。没有波形。
以下是我的程序
#define StartTimer1() {TIM1->CR1 |= 0x01;}
#define StopTimer1() {TIM1->CR1 &= 0x3FE;TIM1->CNT = 0;}
void TIM1_Init(void)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
//TIM1 clock enable
RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE);
TIM_TimeBaseStructure.TIM_Period = 4096; //计数器计到4096溢出
TIM_TimeBaseStructure.TIM_Prescaler = 143; //对TIM1时钟143+1分频
TIM_TimeBaseStructure.TIM_ClockDivision = 0;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //向上计数
TIM_TimeBaseStructure.TIM_RepetitionCounter = 0;
TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure);
TIM_ARRPreloadConfig(TIM1, DISABLE); //预装载寄存器的内容被立即传送到影子寄存器
TIM_Cmd(TIM1, DISABLE);
}
int main(void)
{
SystemInit();// APB2总线时钟72M
GPIOInit(); //IO 口设为输出,并且时钟已经打开
TIM1_Init();
while(1)
{
//APB2 = 72M,给TIM1的时钟是将其144分频。那么TIMclk就是72M/(143+1),周期2us
GPIO_WriteBit(GPIOA, GPIO_Pin_1, (BitAction)(1 - GPIO_ReadOutputDataBit(GPIOA, GPIO_Pin_1)));// IO翻转
StartTimer1();
while((TIM1->CNT) < 65);//理论上这个延时是128us
StopTimer1();
//可是,输出没有波形,还需要设置什么啊,受不了
}
} |