最近用到SPI1的1线只发送模式驱动HC595, 用了PA5和PA7两个引脚, 另外还需要用到定时器3通道1的脉宽输出功能,用到了PA6。查了STM32CubeMX中的引脚分配,确定可以分配到这3个引脚上。
但现在一但打开SPI1的电源,都没有初始化SPI1的功能,PA6就没有脉宽输出了。 将SPI1配置为1线只发送模式也不行,除非重映射SPI1管脚。
难道是SPI1的复用功能的优先级比定时器3的高,而且即使配置成1线只发送也还占用复用功能?
那么有没有方法将定时器的优先级提高点? 或者STM32CubeMX出错了
下面是代码:
- static void TIMInit()
- {
- GPIO_InitTypeDef GPIO_InitStructure ={GPIO_Pin_6,GPIO_Speed_2MHz,GPIO_Mode_AF_PP};
- GPIO_Init(GPIOA,&GPIO_InitStructure);
- TIM_DeInit(TIM3);
- //时钟为72M
- TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct;
- TIM_TimeBaseInitStruct.TIM_Prescaler=0; //不使用预分频
- TIM_TimeBaseInitStruct.TIM_Period=F_CPU/360/8-1;
- TIM_TimeBaseInitStruct.TIM_ClockDivision=0;
- TIM_TimeBaseInitStruct.TIM_CounterMode=TIM_CounterMode_Up;
- TIM_TimeBaseInitStruct.TIM_RepetitionCounter=0;
- TIM_TimeBaseInit(TIM3,&TIM_TimeBaseInitStruct);
-
- //利用比较匹配,控制亮度,使能预装载
- TIM_OCInitTypeDef TIM_OCInitStructure;
- TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
- TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
- TIM_OCInitStructure.TIM_OutputNState = TIM_OutputState_Disable;
- TIM_OCInitStructure.TIM_Pulse = (F_CPU/360/8)*10/100-1; //预设10%
- TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low;
- TIM_OCInitStructure.TIM_OCIdleState = TIM_OCPolarity_High;
- TIM_OC1Init(TIM3,&TIM_OCInitStructure);
- TIM_OC1PreloadConfig(TIM3,TIM_OCPreload_Enable);
- TIM_Cmd(TIM3,ENABLE);
- }
- void Init()
- {
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
- RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);
-
- TIMInit();
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE); //开启SPI1时钟就不行
- }
复制代码
一周热门 更多>