stm32f103的SPI和定时器脉宽输出复用冲突,怎么改优先级?

2019-12-20 21:30发布

最近用到SPI1的1线只发送模式驱动HC595, 用了PA5和PA7两个引脚, 另外还需要用到定时器3通道1的脉宽输出功能,用到了PA6。查了STM32CubeMX中的引脚分配,确定可以分配到这3个引脚上。

但现在一但打开SPI1的电源,都没有初始化SPI1的功能,PA6就没有脉宽输出了。 将SPI1配置为1线只发送模式也不行,除非重映射SPI1管脚。

难道是SPI1的复用功能的优先级比定时器3的高,而且即使配置成1线只发送也还占用复用功能?

那么有没有方法将定时器的优先级提高点?  或者STM32CubeMX出错了

下面是代码:

  1. static void TIMInit()
  2. {
  3.         GPIO_InitTypeDef GPIO_InitStructure        ={GPIO_Pin_6,GPIO_Speed_2MHz,GPIO_Mode_AF_PP};
  4.         GPIO_Init(GPIOA,&GPIO_InitStructure);
  5.         TIM_DeInit(TIM3);
  6.         //时钟为72M
  7.         TIM_TimeBaseInitTypeDef  TIM_TimeBaseInitStruct;
  8.         TIM_TimeBaseInitStruct.TIM_Prescaler=0;                                                        //不使用预分频
  9.         TIM_TimeBaseInitStruct.TIM_Period=F_CPU/360/8-1;
  10.         TIM_TimeBaseInitStruct.TIM_ClockDivision=0;
  11.         TIM_TimeBaseInitStruct.TIM_CounterMode=TIM_CounterMode_Up;
  12.         TIM_TimeBaseInitStruct.TIM_RepetitionCounter=0;
  13.           TIM_TimeBaseInit(TIM3,&TIM_TimeBaseInitStruct);
  14.        
  15.         //利用比较匹配,控制亮度,使能预装载
  16.         TIM_OCInitTypeDef TIM_OCInitStructure;
  17.           TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
  18.           TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;     
  19.           TIM_OCInitStructure.TIM_OutputNState = TIM_OutputState_Disable;               
  20.           TIM_OCInitStructure.TIM_Pulse = (F_CPU/360/8)*10/100-1;         //预设10%
  21.           TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low;         
  22.         TIM_OCInitStructure.TIM_OCIdleState = TIM_OCPolarity_High;
  23.           TIM_OC1Init(TIM3,&TIM_OCInitStructure);
  24.         TIM_OC1PreloadConfig(TIM3,TIM_OCPreload_Enable);

  25.         TIM_Cmd(TIM3,ENABLE);
  26. }


  27. void Init()
  28. {
  29.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
  30.         RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);
  31.        
  32.         TIMInit();
  33.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE);        //开启SPI1时钟就不行
  34. }
复制代码
0条回答

一周热门 更多>