OpenEdv-开源电子网

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

HRTIM初始化如何操作?感觉好像少了哪个步骤

[复制链接]

3

主题

7

帖子

0

精华

新手上路

积分
24
金钱
24
注册时间
2019-2-27
在线时间
12 小时
发表于 2019-7-16 15:22:57 | 显示全部楼层 |阅读模式
14金钱
高性能处理器的HRTIM看了参考手册感觉很好用,手上有一个H7的板子,想要测试一下PWM功能,可是网上又没有太多例子,自己参照参考手册写了一个例子,但是没有PWM输出,
检查了几遍,也没发现问题出在哪里,应该是哪个地方忽略掉了没考虑到。
以下是自己写的程序部分,各位帮忙看一看少了哪个步骤,还是哪个步骤出了错误??
==================================================
        RCC->AHB4ENR|=1<<2;           //使能PORTC时钟       
        GPIO_Set(GPIOC,PIN6|PIN7,GPIO_MODE_AF,GPIO_OTYPE_PP,GPIO_SPEED_HIGH,GPIO_PUPD_PU);//复用功能,上拉输出
        GPIO_AF_Set(GPIOC,6,2);        //PB1,AF2
        GPIO_AF_Set(GPIOC,7,2);        //PB1,AF2
       
        RCC->CFGR|=1<<14;//预分频器时钟源为CPU 时钟(rcc_c_ck)
        RCC->APB2ENR|=1<<29;//使能HRTIM 外设时钟
        RCC->APB2RSTR|=1<<29;//复位HRTIM 模块
        RCC->APB2LPENR|=1<<29;//CSleep 模式期间使能HRTIM 外设时钟
        while((RCC->APB2RSTR|(1<<29))==(1<<29));
       
       
        //MCR        控制寄存器
        HRTIM1->sMasterRegs.MCR|=1<<27;//预装载使能
        HRTIM1->sMasterRegs.MCR|=1<<3;//连续模式
        HRTIM1->sMasterRegs.MCR|=5<<0;// 101 时钟预分频器
        //MPER        主定时器周期寄存器
        HRTIM1->sMasterRegs.MPER=0x0000FF00;
        //MCNTR        主定时器计数寄存器
        HRTIM1->sMasterRegs.MCNTR=0;
        //MCMP1R        主定时器比较寄存器
        HRTIM1->sMasterRegs.MCMP1R=0x0000FFDF/2;
        //TIMxCR        控制寄存器
        HRTIM1->sTimerxRegs[0].TIMxCR|=1<<27;//预装载使能
        HRTIM1->sTimerxRegs[0].TIMxCR|=1<<24;//使能通过主定时器触发更新
        HRTIM1->sTimerxRegs[0].TIMxCR|=1<<3;//连续模式
        HRTIM1->sTimerxRegs[0].TIMxCR|=5<<0;//时钟预分频器
        HRTIM1->sTimerxRegs[0].PERxR=0x0000FF00;//定时器A周期设置
        HRTIM1->sTimerxRegs[0].CNTxR=0x00;//定时器A初始值为0
        HRTIM1->sTimerxRegs[0].SETx1R|=1<<8;//主定时器比较1 事件会强制将输出设为其有效状态。
        HRTIM1->sTimerxRegs[0].SETx2R|=1<<8;//主定时器比较1 事件会强制将输出设为其有效状态。
        HRTIM1->sCommonRegs.OENR|=3<<0;
        HRTIM1->sMasterRegs.MCR|=1<<16;//使能主定时器计数器
        HRTIM1->sMasterRegs.MCR|=1<<17;//定时器A计数器使能


==================================================

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

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165508
金钱
165508
注册时间
2010-12-1
在线时间
2115 小时
发表于 2019-7-17 02:06:01 | 显示全部楼层
帮顶,没用过这个功能哦
回复

使用道具 举报

1

主题

5

帖子

0

精华

新手上路

积分
39
金钱
39
注册时间
2019-4-26
在线时间
10 小时
发表于 2019-9-19 13:59:32 | 显示全部楼层
如果你是想在主定时器比较值满足时输出TA1,TA2。
我看了你的程序只是设置了定时器A置1的事件HRTIM1->sTimerxRegs[0].SETx1R|=1<<8;
没有写复位的事件,HRTIM1->sTimerxRegs[0].RSTx1R
可以加上
HRTIM1->sTimerxRegs[0].RSTx1R |=1<<7;  //定时周期事件时清0
HRTIM1->sTimerxRegs[0].RSTx2R |=1<<7;
回复

使用道具 举报

1

主题

5

帖子

0

精华

新手上路

积分
39
金钱
39
注册时间
2019-4-26
在线时间
10 小时
发表于 2019-9-19 14:44:02 | 显示全部楼层
我改了一下,使用定时器A输出TA1和TA2
void HRTIM_Init()
{
        GPIO_InitTypeDef GPIO_InitStruct = {0};


  /* USER CODE BEGIN HRTIM_Init 1 */

  /* USER CODE END HRTIM_Init 1 */
  hhrtim.Instance = HRTIM1;
  hhrtim.Init.HRTIMInterruptResquests = HRTIM_IT_NONE;
  hhrtim.Init.SyncOptions = HRTIM_SYNCOPTION_NONE;
  HAL_HRTIM_Init(&hhrtim);
       
        //RCC->AHB4ENR|=1<<2;           //使能PORTC时钟        
     __HAL_RCC_GPIOC_CLK_ENABLE();
    /**HRTIM GPIO Configuration   
    PC6     ------> HRTIM_CHA1
    PC7     ------> HRTIM_CHA2
    */
    GPIO_InitStruct.Pin = GPIO_PIN_6|GPIO_PIN_7;
    GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
    GPIO_InitStruct.Pull = GPIO_NOPULL;
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
    GPIO_InitStruct.Alternate = GPIO_AF1_HRTIM1;
    HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
        
//        RCC->CFGR|=1<<14;//预分频器时钟源为CPU 时钟(rcc_c_ck)
//        RCC->APB2ENR|=1<<29;//使能HRTIM 外设时钟
//        RCC->APB2RSTR|=1<<29;//复位HRTIM 模块
//        RCC->APB2LPENR|=1<<29;//CSleep 模式期间使能HRTIM 外设时钟
//        while((RCC->APB2RSTR|(1<<29))==(1<<29));
        
        
        //MCR        控制寄存器
//        HRTIM1->sMasterRegs.MCR|=1<<27;//预装载使能
//        HRTIM1->sMasterRegs.MCR|=1<<3;//连续模式
//        HRTIM1->sMasterRegs.MCR|=5<<0;// 101 时钟预分频器
HRTIM1->sTimerxRegs[HRTIM_TIMERINDEX_TIMER_A].TIMxCR = HRTIM_MODE_CONTINUOUS                        //连续模式+使能预装载+使能重复有关更新+预分配
                                                                                                                + HRTIM_TIMCR_PREEN
                                                                                                                + HRTIM_TIMCR_TREPU
                                                                                                                + HRTIM_PRESCALERRATIO_DIV4;
        //MPER        主定时器周期寄存器
        HRTIM1->sMasterRegs.MPER=0x0000FF00;
        //MCNTR        主定时器计数寄存器
        HRTIM1->sMasterRegs.MCNTR=0;
        //MCMP1R        主定时器比较寄存器
        HRTIM1->sMasterRegs.MCMP1R=0x0000FFDF/2;
        //TIMxCR        控制寄存器
        HRTIM1->sTimerxRegs[0].TIMxCR|=1<<27;//预装载使能
        HRTIM1->sTimerxRegs[0].TIMxCR|=1<<24;//使能通过主定时器触发更新
        HRTIM1->sTimerxRegs[0].TIMxCR|=1<<3;//连续模式
        HRTIM1->sTimerxRegs[0].TIMxCR|=5<<0;//时钟预分频器
        HRTIM1->sTimerxRegs[0].PERxR=0x0000FF00;//定时器A周期设置
        HRTIM1->sTimerxRegs[0].CNTxR=0x00;//定时器A初始值为0
                HRTIM1->sTimerxRegs[0].CMP1xR=0x0000FFDF/2;
//        HRTIM1->sTimerxRegs[0].SETx1R|=1<<8;//主定时器比较1 事件会强制将输出设为其有效状态。
//        HRTIM1->sTimerxRegs[0].SETx2R|=1<<8;//主定时器比较1 事件会强制将输出设为其有效状态。
//                HRTIM1->sTimerxRegs[0].RSTx1R|=1<<7;//主定时器比较1 事件会强制将输出设为其有效状态。
//        HRTIM1->sTimerxRegs[0].RSTx2R|=1<<7;//主定时器比较1 事件会强制将输出设为其有效状态。
               

                HRTIM1->sTimerxRegs[0].SETx1R|=HRTIM_SET1R_CMP1;//主定时器比较1 事件会强制将输出设为其有效状态。
        HRTIM1->sTimerxRegs[0].SETx2R|=HRTIM_SET1R_CMP1;//主定时器比较1 事件会强制将输出设为其有效状态。
                HRTIM1->sTimerxRegs[0].RSTx1R|=HRTIM_SET1R_PER;//主定时器比较1 事件会强制将输出设为其有效状态。
        HRTIM1->sTimerxRegs[0].RSTx2R|=HRTIM_SET1R_PER;//主定时器比较1 事件会强制将输出设为其有效状态。
        HRTIM1->sCommonRegs.OENR|=3<<0;
        HRTIM1->sMasterRegs.MCR|=1<<16;//使能主定时器计数器
        HRTIM1->sMasterRegs.MCR|=1<<17;//定时器A计数器使能
        }
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-16 14:16

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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