打印

STM32F105 TIM1 计数 求助

[复制链接]
2608|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
03024003|  楼主 | 2009-12-9 16:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
谁能帮咱看看差在哪

我想用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();
                //可是,输出没有波形,还需要设置什么啊,受不了
        }
}
沙发
barboon| | 2009-12-9 17:01 | 只看该作者
你的GPIO配置过程对吗?不依靠TIM单独写GPIO能实现管脚翻转吗?
还有,要实现方波不需要那么麻烦的方式,直接用TIM的PWM输出就行了。

使用特权

评论回复
板凳
秋天落叶| | 2009-12-9 18:55 | 只看该作者
main前面加int表示什么呢,返回一个整型吗,返回到哪去,一直没搞明白

使用特权

评论回复
地板
03024003|  楼主 | 2009-12-17 14:42 | 只看该作者
串口中断标记没清导致一直进中断,这样,IO就无法输出波形,定时器的问题不是

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

21

主题

125

帖子

0

粉丝