OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 932|回复: 2

求助开启两个定时器一个tim6一个tim3,tim6计时tim3输出PWM波下载后不行,换了两个初始化函数位置就可以了这是为什么啊

[复制链接]

1

主题

1

帖子

0

精华

新手入门

积分
10
金钱
10
注册时间
2023-12-30
在线时间
1 小时
发表于 2023-12-30 23:54:10 | 显示全部楼层 |阅读模式
#include "tim.h"
TIM_HandleTypeDef tim_handle;
void tim_init(uint16_t arr,uint16_t psc)
{
  tim_handle.Instance=TIM6;
  tim_handle.Init.CounterMode=TIM_COUNTERMODE_UP;
  tim_handle.Init.ClockDivision=TIM_CLOCKDIVISION_DIV1;
        tim_handle.Init.Period=arr;
        tim_handle.Init.Prescaler=psc;
        HAL_TIM_Base_Init(&tim_handle);
        HAL_TIM_Base_Start(&tim_handle);
}
void HAL_TIM_Base_MspInit(TIM_HandleTypeDef *htim)
{

if(htim->Instance==TIM6)
{
__HAL_RCC_TIM6_CLK_ENABLE();


}




}
TIM_HandleTypeDef tim_pwm_handle;
void tim_pwm_init(uint16_t arr,uint16_t psc)
{
TIM_OC_InitTypeDef timx_oc_pwm_chy;
        tim_pwm_handle.Instance=TIM3;
        tim_pwm_handle.Init.CounterMode=TIM_COUNTERMODE_UP;
  tim_pwm_handle.Init.ClockDivision=TIM_CLOCKDIVISION_DIV1;
  tim_pwm_handle.Init.Period=arr;
  tim_pwm_handle.Init.Prescaler=psc;
HAL_TIM_PWM_Init(&tim_pwm_handle);
  timx_oc_pwm_chy.OCMode=TIM_OCMODE_PWM1;
  timx_oc_pwm_chy.OCPolarity=TIM_OCPOLARITY_HIGH;
  timx_oc_pwm_chy.Pulse=arr/2;
HAL_TIM_PWM_ConfigChannel(&tim_pwm_handle,&timx_oc_pwm_chy,TIM_CHANNEL_3);
        timx_oc_pwm_chy.OCMode=TIM_OCMODE_PWM1;
  timx_oc_pwm_chy.OCPolarity=TIM_OCPOLARITY_HIGH;
  timx_oc_pwm_chy.Pulse=arr/2;
        HAL_TIM_PWM_ConfigChannel(&tim_pwm_handle,&timx_oc_pwm_chy,TIM_CHANNEL_4);
        HAL_TIM_PWM_Start(&tim_pwm_handle,TIM_CHANNEL_3);
        HAL_TIM_PWM_Start(&tim_pwm_handle,TIM_CHANNEL_4);
}
void HAL_TIM_PWM_MspInit(TIM_HandleTypeDef *htim)
{
    if(htim->Instance == TIM3)
    {
        GPIO_InitTypeDef gpio_init_struct;
        __HAL_RCC_GPIOB_CLK_ENABLE();
        __HAL_RCC_TIM3_CLK_ENABLE();
         __HAL_RCC_AFIO_CLK_ENABLE();
        gpio_init_struct.Pin = GPIO_PIN_0|GPIO_PIN_1;
        gpio_init_struct.Mode = GPIO_MODE_AF_PP;            /* 推挽复用 */
        gpio_init_struct.Pull = GPIO_PULLUP;                /* 上拉 */
        gpio_init_struct.Speed = GPIO_SPEED_FREQ_HIGH;      /* 高速 */
        HAL_GPIO_Init(GPIOB, &gpio_init_struct);
                }
        }
主函数调换tim6和tim3初始化函数位置就可以了
int main(void)
{
    HAL_Init();                             /* 初始化HAL库 */
    sys_stm32_clock_init(RCC_PLL_MUL9);     /* 设置时钟, 72Mhz */
    delay_init(72);                         /* 延时初始化 */
    usart_init(115200);                     /* 串口初始化为115200 */
    usmart_dev.init(72);                    /* 初始化USMART */
    led_init();                             /* 初始化LED */
    rtc_init();
//        tim_init(499,71);
        tim_pwm_init(59999,23);

                tim_init(499,71);
这是为什么啊

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2024-1-7 22:02:10 | 显示全部楼层
仿真,看寄存器状态分析问题
回复 支持 反对

使用道具 举报

1

主题

4

帖子

0

精华

新手入门

积分
10
金钱
10
注册时间
2023-5-27
在线时间
3 小时
发表于 2024-1-8 16:11:00 | 显示全部楼层
我也和你一样的问题,我按照你的方法换了一下顺序,然后也可以了!请问你找出原因了吗?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-23 12:47

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表