ST意法半导体
直播中

吴湛

9年用户 744经验值
擅长:可编程逻辑
私信 关注
[问答]

stm32f446re PA8引脚切换到TIM8时没有任何改变咋办

  • #define CR1_CEN                        (1U<<0)
  • /* *************** Enabling PA6, PA7 as OUTPUT PINs *************** */
  •         /* Enabling clock access AHB1EN for GPIOC */
  •         RCC->AHB1ENR |= (1U<<2);
  • /* *************** Setup tiMER8 for PWM control *************** */
  •         /* Enable clock access to tim8 */
  •         RCC->APB2ENR |= (1U<<1);
  •         /* Set PC6 as AF3 for TIM3_CH1 */
  •         GPIOC->MODER |= (1U << 13);
  •         GPIOC->MODER &=~ (1U << 12);
  •         /* Choose AF3(0b0011) for PC6 (AFR[1], it's used for pins from 8 to 15) */
  •         GPIOC->AFR[0] |= (0x3 << 24);
  • /* *************** TIM3 settings for PWM *************** */
  •         /* Set prescaler value */
  •         TIM8->PSC = 16000 - 1;
  •         /* Set auto-reload value */
  •         TIM8->ARR = 100 - 1;
  •         /* Set CCR1 as a preload value, it's used to determine the DUTY CYCLE        */
  •         TIM8->CCR1 = 90;
  •         /* Set CCMR1 for output compare PWM mode 1 */
  •         TIM8->CCMR1 |= (1U << 6) | (1U << 5);
  •         /* *************** Compare MODE / interrupt status *************** */
  •         /* Enable use of preload register */
  •         TIM8->CCMR1 |= (1U<<3); // CCMR1_OC1PE_EN
  •         /* Enable CH1 as Output Compare */
  •         TIM8->CCER |= (1U<<0); // CC1EEN
  •         /* Enable TIM interrupt */
  •        //TIM8->DIER |= (1U<<0);
  •         /* Enable TIM interrupt in NVIC */
  •         //NVIC_EnableIRQ(TIM8_IRQn);
  •         /* Enable timer*/
  •         TIM8->CR1 |= CR1_CEN;

不幸的是,根据万用表,我看不到输出端电压水平的任何变化或频率水平的任何变化。
无论我将什么值设置为 DC 或 PSC 等,我也无法打开外部 LED。
我的代码有什么问题?
请注意,我最初在 PA8 尝试使用 TIM1,现在我切换到 TIM8,但没有任何改变。
我还想说,当我使用 TIM1 时,我可以通过设置 TIM1 工作的所有内容来获得足够高的电压输出,但 AFR[0] = 0b0001 << 28;这很奇怪,因为我对 AFR 可能出于某种原因从 PA1 开始的想法感到困惑。我可以用这些设置点亮 LED(但没有我想要的那么多)
由于此 pwm 将用于 H 桥,因此它在更高电压下工作很重要(至少 3V .. 作为 pwm)
谢谢!!

回帖(1)

顾天天

2022-12-21 16:31:35
TIM8 是一个高级定时器(与 TIM1 一样)并且具有 MOE(主输出使能)位以全局启用 PWM。你需要设置它。


  • SET_BIT(TIMx->BDTR, TIM_BDTR_MOE);
举报

更多回帖

发帖
×
20
完善资料,
赚取积分