qingzhu-325396 发表于 2017-2-17 10:24:59

有哪位高手用STM32F303XB JTAG JTDO口(B3)做TIM8输出

将STM32F303CBT6的39脚(B3)复用为TIM8_CH1N,做PWM三相互补输出,发现除TIM8_CH1N外,其他输出均正常,有哪位高手可以指点一下。
        /* GPIOB&TIM8 Periph clock enable */
        RCC->APB2ENR |= 0x00002000;
        RCC->AHBENR |= 0x00040000;


        //IO
        GPIOB->AFR &= 0x00000FFF;
        GPIOB->AFR |= 0x55344000;
        GPIOB->AFR &= 0xFFFFFF00;
        GPIOB->AFR |= 0x000000AA;


        /* Speed mode configuration */
        GPIOB->OSPEEDR |= 0x000FFFC0;
        /* Output mode configuration */
        GPIOB->OTYPER &= 0xFFFFFC07;
       
        GPIOB->PUPDR &= 0xFFF0003F;
        GPIOB->PUPDR |= 0x000AAA80;        
       
        GPIOB->MODER&= 0xFFF0003F;
        GPIOB->MODER |= 0x000A2A80;        
               
       
/****TimeBaseInit********/
        //tDTS=tCK_INT, TIM8_ARR register is not buffered;Center-aligned mode 3
        TIM8->CR1 = 0x00E0;

        //25uS*2;20KHz(1800)
        //25uS;40KHz()
        /* Set the Autoreload value */
        TIM8->ARR = 1800 ;


        /* Set the Prescaler value */
        TIM8->PSC = 0;
       
        /* Generate an update event to reload the Prescaler
   and the repetition counter(only for TIM1 and TIM8) value immediatly */
        TIM8->EGR = 0x0001;

       
        /* Reset the Output Polarity level */
        TIM8->CCER = 0x00000000;


        /* Write to TIMx CR2 */
        TIM8->CR2 = 0;

        /* Reset the Output Compare Mode Bits */
        //PWMA,B,C,4:PWM mode2
        TIM8->CCMR1 = 0x00007070;
        TIM8->CCMR2 = 0x00007070;
        //PWM5
        TIM8->CCMR3 = 0x00000060;


        /* Set the Capture Compare Register value */
        TIM8->CCR1 = 600;
        TIM8->CCR2 = 900;
        TIM8->CCR3 = 1500;
        TIM8->CCR4 = 1800;
        TIM8->CCR5 = 1740;



        /* Set the Output Compare Polarity */
        TIM8->CCER |= 0x00011555;

        /* Reset the Output Compare Mode Bits */
        //TIM8->CCMR1 &= 0xFFFFF7F7;
        //TIM8->CCMR2 &= 0xFFFFF7F7;
        //TIM8->CCMR3 &= 0xFFFFFFF7;


        TIM8->BDTR = 0x00028108;//????
       
        TIM8->SR &=0xFF7E;
        TIM8->DIER = 0x0000;

        /* Enable the TIM Counter */
        TIM8->CR1 &= 0xFFFE;
        TIM8->CR1 |= 0x0001;       


creep 发表于 2017-2-17 10:43:00

贴代码建议用论坛的代码插入工具,否则可能会将代码转化为表情。:D


xmshao 发表于 2017-2-17 12:08:12

本帖最后由 xmshao 于 2017-2-17 12:12 编辑

寄存器代码看起来真辛苦,这里没看出配置问题来。
主要检查MODER/AFR寄存器的配置。
你也不妨检查确认下硬件线路。

或者用STM32CUBEMX配置个测试代码试试。

qingzhu-325396 发表于 2017-2-17 14:02:23

creep 发表于 2017-2-17 10:43
贴代码建议用论坛的代码插入工具,否则可能会将代码转化为表情。

第一次发,见谅见谅。。。

qingzhu-325396 发表于 2017-2-17 14:08:01

xmshao 发表于 2017-2-17 12:08
寄存器代码看起来真辛苦,这里没看出配置问题来。
主要检查MODER/AFR寄存器的配置。
你也不妨检查确认下硬 ...

检查过MODER和AFR寄存器,没有错。硬件连接也是好的。JTAG的端口有有两个被复用到TIM8输出,一个正常,就是JTDO没有输出。现在准备试一下直接用库函数。
页: [1]
查看完整版本: 有哪位高手用STM32F303XB JTAG JTDO口(B3)做TIM8输出