Timer1定时器ch3和spi2的MOSI的信号混乱

2019-07-21 09:03发布

本帖最后由 STM129 于 2018-10-15 20:50 编辑

   板子为STM32F107,SPI2接OLED,三按键分别是PA0,PC1,PC13,Timer1定时器ch3触发ADC10,程序都是改自原子哥的例程。
   各通道给不同的数值,有的正常,有的Timer1定时器ch3的反相波型和MOSI的信号混乱了,到底是设置错了还是那里出错了或者芯片不稳定
初始化程序:
u16 CH1=10,CH2=150,CH3=80,CHT=299;// CH1,CH2,CH3 为倒数,CHT 为总周期  ..  .. ( 这条输出正常)
// u16 CH1=10,CH2=120,CH3=80,CHT=239;// CH1,CH2,CH3 为倒数,CHT 为总周期 .. . (这条输出不正常,花屏了)
float temp;
// u8 lcd_id[12];   //存放LCD ID字符串
delay_init();       //延时函数初始化
GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE); //关闭jtag,使能SWD,可以用SWD模式调试,SWDA13,PA14
// LED_Init();     //初始化与LED连接的硬件接口
KEY_Init();
SPI2_Init();
OLED_Init();   //初始化OLED
  Adc_Init();      //ADC初始化
Stepperdrive_Init(); //步进电机驱动

TIM1_PWM_Init(CHT,71);//72分频
TIM_SetCompare1(TIM1,CH1);
TIM_SetCompare2(TIM1,CH2);
TIM_SetCompare3(TIM1,CH3);

下面是PWM初始化:
[mw_shl_code=c,true]#include "pwm.h"
#include "led.h"
//////////////////////////////////////////////////////////////////////////////////         
//本程序只供学习使用,未经作者许可,不得用于其它任何用途
//ALIENTEK Mini STM32开发板
//PWM  驱动代码                           
//正点原子@ALIENTEK
//技术论坛:www.openedv.com
//修改日期:2010/12/03
//版本:V1.0
//版权所有,盗版必究。
//Copyright(C) 正点原子 2009-2019
//All rights reserved
//
//PWM输出初始化
//arr:自动重装值
//psc:时钟预分频数
void TIM1_PWM_Init(u16 arr,u16 psc)
{  
         GPIO_InitTypeDef GPIO_InitStructure;
        TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
        TIM_OCInitTypeDef  TIM_OCInitStructure;

        RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE);//
         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA , ENABLE);  //使能GPIO外设时钟使能
                                                                                    

   //设置该引脚为复用输出功能,输出TIM1 CH1的PWM脉冲波形
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_11; //TIM_CH1
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;  //复用推挽输出
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_Init(GPIOA, &GPIO_InitStructure);

        
        TIM_TimeBaseStructure.TIM_Period = arr; //设置在下一个更新事件装入活动的自动重装载寄存器周期的值         80K
        TIM_TimeBaseStructure.TIM_Prescaler =psc; //设置用来作为TIMx时钟频率除数的预分频值  不分频
        TIM_TimeBaseStructure.TIM_ClockDivision = 0; //设置时钟分割:TDTS = Tck_tim
        TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //TIM向上计数模式
        TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure); //根据TIM_TimeBaseInitStruct中指定的参数初始化TIMx的时间基数单位

        //        通道1
        //               
        TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; //选择定时器模式:TIM脉冲宽度调制触发ADC2
        TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比较输出使能
        TIM_OCInitStructure.TIM_Pulse = 0; //设置待装入捕获比较寄存器的脉冲值
        TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low; //输出极性:高
//        TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low; //输出极性:低        
        TIM_OC1Init(TIM1, &TIM_OCInitStructure);  //根据TIM_OCInitStruct中指定的参数初始化外设TIMx
         //通道2
        TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比较输出使能
        TIM_OCInitStructure.TIM_Pulse = 0; //设置待装入捕获比较寄存器的脉冲值
        TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //输出极性:低
        TIM_OC2Init(TIM1, &TIM_OCInitStructure);  //根据TIM_OCInitStruct中指定的参数初始化外设TIMx
         //通道3
//        TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Disable; //比较输出使能
        TIM_OCInitStructure.TIM_Pulse = 0; //设置待装入捕获比较寄存器的脉冲值
        TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //输出极性:低
        TIM_OC3Init(TIM1, &TIM_OCInitStructure);  //根据TIM_OCInitStruct中指定的参数初始化外设TIMx

        TIM_CtrlPWMOutputs(TIM1,ENABLE);        //MOE 主输出使能        

        TIM_OC1PreloadConfig(TIM1, TIM_OCPreload_Enable);  //CH1预装载使能         
        TIM_OC2PreloadConfig(TIM1, TIM_OCPreload_Enable);  //CH2预装载使能        
        TIM_OC3PreloadConfig(TIM1, TIM_OCPreload_Enable);  //CH3预装载使能
        
        TIM_ARRPreloadConfig(TIM1, ENABLE); //使能TIMx在ARR上的预装载寄存器
        
        TIM_Cmd(TIM1, ENABLE);  //使能TIM1

   
}[/mw_shl_code]



友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
2条回答
正点原子
1楼-- · 2019-07-21 09:28
不用定时器,单独用SPI,正常么?
不用SPI,单独用定时器,正常么?
STM129
2楼-- · 2019-07-21 12:48
正点原子 发表于 2018-10-16 01:52
不用定时器,单独用SPI,正常么?
不用SPI,单独用定时器,正常么?

单独用SPI,正常的,
单独用定时器,也正常,SPI2初始化后也正常,ADC初始化后会在PB15输出CH3N,ADC初始化的是PC0,触发是T1的CH3

一周热门 更多>