4600|10

337

帖子

0

TA的资源

纯净的硅(初级)

楼主
 

怎样利用STM32L476的TIM1输出脉冲?? [复制链接]

 
5芯积分
各位,我想用单独的TIM1通过PA7(TIM1_CH1N)输出指定个数的脉冲。参考了很多例程,网上的,还有STM32CUBE库自带的例程。都没有输出,只是CNT计数器可以计数。请大家指点指点。ST的技术支持也不是狠好。

此帖出自stm32/stm8论坛

最新回复

A口时钟开了吧  详情 回复 发表于 2018-9-11 09:49
点赞 关注(1)
 

回复
举报

337

帖子

0

TA的资源

纯净的硅(初级)

沙发
 
版主,该上班了哦,有人找你
此帖出自stm32/stm8论坛
 
 

回复

935

帖子

1

TA的资源

禁止发言

板凳
 
灵动微电子的产品型号MM32L362PF 可以升级替换STM32L151C8T6,STM32L152C8T6,STM32L071RBT6,STM32L071RBT6,STM32L051,STM32L031,STM32L052 需要联系我 QQ3161422826 手机13751192923
此帖出自stm32/stm8论坛
 
个人签名存储芯片/MCU/SRAM/PSRAM/DDR/FLASH/MRAM。web.www.sramsun.com  QQ3161422826 TEL:13751192923
 

回复

4008

帖子

0

TA的资源

版主

4
 
不知道你是怎样输出的呀,是pwm模式还是比较模式,是软件计数还是用高级定时器的重复次数。
此帖出自stm32/stm8论坛

点评

我上面说了的撒,用的TIM1_CH1N,肯定是高级计数器TIM1.其实就是实现这个功能[attachimg]373714[/attachimg]  详情 回复 发表于 2018-9-4 13:59
 
 
 

回复

337

帖子

0

TA的资源

纯净的硅(初级)

5
 
huo_hu 发表于 2018-9-4 00:47
不知道你是怎样输出的呀,是pwm模式还是比较模式,是软件计数还是用高级定时器的重复次数。

我上面说了的撒,用的TIM1_CH1N,肯定是高级计数器TIM1.其实就是实现这个功能[img]file:///C:\Users\qwkrom\AppData\Roaming\Tencent\Users\2430659177\QQ\WinTemp\RichOle\M`AP7){U[VJF}A{08V2$5IN.png[/img][img=0,1]file:///C:\Users\qwkrom\AppData\Roaming\Tencent\Users\2430659177\QQ\WinTemp\RichOle\M`AP7){U[VJF}A{08V2$5IN.png[/img][img=0,1]file:///C:\Users\qwkrom\AppData\Roaming\Tencent\Users\2430659177\QQ\WinTemp\RichOle\M`AP7){U[VJF}A{08V2$5IN.png[/img][img=0,1]file:///C:\Users\qwkrom\AppData\Roaming\Tencent\Users\2430659177\QQ\WinTemp\RichOle\M`AP7){U[VJF}A{08V2$5IN.png[/img]
file:///C:\Users\qwkrom\AppData\Roaming\Tencent\Users\2430659177\QQ\WinTemp\RichOle\0FJP$RJ4JFNRQP%0)({03%5.pngfile:///C:\Users\qwkrom\AppData\Roaming\Tencent\Users\2430659177\QQ\WinTemp\RichOle\0FJP$RJ4JFNRQP%0)({03%5.png


此帖出自stm32/stm8论坛

点评

最近刚好弄这个,cube生成的代码里几个地方要操作一下,一个是 TIM_OC_InitStruct.OCState 和 OCNState 要enable 还有一个是刹车控制,默认是使能所有通道是关闭的,LL_TIM_EnableAllOutputs(TIM1);这句可以开启,如果C  详情 回复 发表于 2018-9-6 12:22
 
 
 

回复

4008

帖子

0

TA的资源

版主

6
 
ZHANGXUEJIE 发表于 2018-9-4 13:59
我上面说了的撒,用的TIM1_CH1N,肯定是高级计数器TIM1.其实就是实现这个功能

最近刚好弄这个,cube生成的代码里几个地方要操作一下,一个是   TIM_OC_InitStruct.OCState 和 OCNState 要enable 还有一个是刹车控制,默认是使能所有通道是关闭的,LL_TIM_EnableAllOutputs(TIM1);这句可以开启,如果CNT不计数用LL_TIM_EnableCounter(TIM1);        开启
此帖出自stm32/stm8论坛

点评

CNT可以计数,就是没有脉冲输出。能否看看你的代码,只要有脉冲输出就可以。 /* Peripheral clock enable */ RCC->APB2ENR |= RCC_APB2ENR_TIM1EN; /* Configure the Time base : + Counter mode :  详情 回复 发表于 2018-9-6 14:15
 
 
 

回复

337

帖子

0

TA的资源

纯净的硅(初级)

7
 
huo_hu 发表于 2018-9-6 12:22
最近刚好弄这个,cube生成的代码里几个地方要操作一下,一个是   TIM_OC_InitStruct.OCState 和 OCNState  ...

CNT可以计数,就是没有脉冲输出。能否看看你的代码,只要有脉冲输出就可以。
/* Peripheral clock enable */
  RCC->APB2ENR |= RCC_APB2ENR_TIM1EN;
       
/* Configure the Time base :
       + Counter mode : UP Counter
       + Clock Division : 1
       + Period : 5000
       + Pulse : 2000  
       + Prescaler : 7
       + Repetition counter : PULSE_NUMBER - 1
*/

/* Set the Timer prescaler to get 1MHz as counter clock */
Prescaler = (uint16_t) (SystemCoreClock / 1000000) - 1;

/* Select the up counter mode */
TIM1->CR1 &= ~(TIM_CR1_DIR | TIM_CR1_CMS);
TIM1->CR1 |= TIM_COUNTERMODE_UP;
  
/* Set the clock division to 1*/
TIM1->CR1 &= ~TIM_CR1_CKD;         
TIM1->CR1 |= TIM_CLOCKDIVISION_DIV1;
       
/* Set the Autoreload value */
TIM1->ARR = PERIOD;      

/* Set the Pulse value */
TIM1->CCR1 = PULSE;

/* Set the Prescaler value */
TIM1->PSC = Prescaler;

/* Set the Repetition counter value */
TIM1->RCR = PULSE_NUMBER - 1;   

/* Generate an update event to reload the Prescaler and the repetition counter
  value immediately */       
TIM1->EGR = TIM_EGR_UG;            
       
/******** Configure the Internal Clock source *********************************/
/* Disable slave mode to clock the prescaler directly with the internal clock
if the TIM_SMCR is in the reset value, we can delete the following instruction*/
TIM1->SMCR =  RESET;
此帖出自stm32/stm8论坛

点评

你io口没初始化,io时钟要打开,另外BDTR 的mod要置高  详情 回复 发表于 2018-9-7 12:43
 
 
 

回复

4008

帖子

0

TA的资源

版主

8
 
ZHANGXUEJIE 发表于 2018-9-6 14:15
CNT可以计数,就是没有脉冲输出。能否看看你的代码,只要有脉冲输出就可以。
/* Peripheral clock enabl ...

你io口没初始化,io时钟要打开,另外BDTR 的mod要置高
此帖出自stm32/stm8论坛

点评

IO口初始化了的,只是没有贴上来 void HAL_TIM_MspPostInit(TIM_HandleTypeDef* timHandle) { GPIO_InitTypeDef GPIO_InitStruct; if(timHandle->Instance==TIM1) { /* USER CODE BEGIN TIM1_MspPos  详情 回复 发表于 2018-9-11 09:37
 
 
 

回复

4008

帖子

0

TA的资源

版主

9
 
void MTIM8_Init(void) {
        LL_TIM_InitTypeDef TIM_InitStruct;
        LL_TIM_OC_InitTypeDef TIM_OC_InitStruct;
//        LL_TIM_BDTR_InitTypeDef TIM_BDTRInitStruct;
        LL_GPIO_InitTypeDef GPIO_InitStruct;
  /* Tim8 PC PA 时钟 */
  LL_APB2_GRP1_EnableClock(LL_APB2_GRP1_PERIPH_TIM8);
        __HAL_RCC_GPIOC_CLK_ENABLE();
        __HAL_RCC_GPIOA_CLK_ENABLE();
       
  /* TIM8 interrupt Init */
  NVIC_SetPriority(TIM8_UP_TIM13_IRQn, NVIC_EncodePriority(NVIC_GetPriorityGrouping(),0, 0));
  NVIC_EnableIRQ(TIM8_UP_TIM13_IRQn);

  TIM_InitStruct.Prescaler = 0;
  TIM_InitStruct.CounterMode = LL_TIM_COUNTERMODE_CENTER_UP;
  TIM_InitStruct.Autoreload = 16384-1;
  TIM_InitStruct.ClockDivision = LL_TIM_CLOCKDIVISION_DIV1;
  TIM_InitStruct.RepetitionCounter = 0;
  LL_TIM_Init(TIM8, &TIM_InitStruct);

  LL_TIM_SetClockSource(TIM8, LL_TIM_CLOCKSOURCE_INTERNAL);
        /*
        LL_TIM_OC_EnablePreload(TIM8, LL_TIM_CHANNEL_CH1);
        LL_TIM_OC_EnablePreload(TIM8, LL_TIM_CHANNEL_CH2);
        LL_TIM_OC_EnablePreload(TIM8, LL_TIM_CHANNEL_CH3);
        LL_TIM_OC_EnablePreload(TIM8, LL_TIM_CHANNEL_CH4);*/       
        LL_TIM_EnableARRPreload(TIM8);
       
  TIM_OC_InitStruct.OCMode = LL_TIM_OCMODE_PWM1;
  TIM_OC_InitStruct.OCState = LL_TIM_OCSTATE_ENABLE;
  TIM_OC_InitStruct.OCNState = LL_TIM_OCSTATE_DISABLE;
  TIM_OC_InitStruct.CompareValue = 0;
  TIM_OC_InitStruct.OCPolarity = LL_TIM_OCPOLARITY_HIGH;
  TIM_OC_InitStruct.OCNPolarity = LL_TIM_OCPOLARITY_HIGH;
  TIM_OC_InitStruct.OCIdleState = LL_TIM_OCIDLESTATE_LOW;
  TIM_OC_InitStruct.OCNIdleState = LL_TIM_OCIDLESTATE_LOW;
        LL_TIM_OC_Init(TIM8, LL_TIM_CHANNEL_CH1, &TIM_OC_InitStruct);
        LL_TIM_OC_Init(TIM8, LL_TIM_CHANNEL_CH2, &TIM_OC_InitStruct);
        LL_TIM_OC_Init(TIM8, LL_TIM_CHANNEL_CH3, &TIM_OC_InitStruct);
        LL_TIM_OC_Init(TIM8, LL_TIM_CHANNEL_CH4, &TIM_OC_InitStruct);       
       
        LL_TIM_OC_EnableFast(TIM8, LL_TIM_CHANNEL_CH1);
        LL_TIM_OC_EnableFast(TIM8, LL_TIM_CHANNEL_CH2);
        LL_TIM_OC_EnableFast(TIM8, LL_TIM_CHANNEL_CH3);
        LL_TIM_OC_EnableFast(TIM8, LL_TIM_CHANNEL_CH4);       
       
  LL_TIM_SetTriggerOutput(TIM8, LL_TIM_TRGO_RESET);
  LL_TIM_DisableMasterSlaveMode(TIM8);


    /**TIM8 GPIO Configuration   
    PC6     ------> TIM8_CH1
    PC7     ------> TIM8_CH2
    PC8     ------> TIM8_CH3
    PC9     ------> TIM8_CH4
    */
  GPIO_InitStruct.Pin = LL_GPIO_PIN_6|LL_GPIO_PIN_7|LL_GPIO_PIN_8|LL_GPIO_PIN_9;
  GPIO_InitStruct.Mode = LL_GPIO_MODE_ALTERNATE;
  GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_VERY_HIGH;
  GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL;//LL_GPIO_OUTPUT_OPENDRAIN;//
  GPIO_InitStruct.Pull = LL_GPIO_PULL_NO;
  GPIO_InitStruct.Alternate = LL_GPIO_AF_3;
  LL_GPIO_Init(GPIOC, &GPIO_InitStruct);
          LL_TIM_EnableAllOutputs(TIM8);
LL_TIM_EnableCounter(TIM8);
此帖出自stm32/stm8论坛
 
 
 

回复

337

帖子

0

TA的资源

纯净的硅(初级)

10
 
huo_hu 发表于 2018-9-7 12:43
你io口没初始化,io时钟要打开,另外BDTR 的mod要置高

IO口初始化了的,只是没有贴上来
void HAL_TIM_MspPostInit(TIM_HandleTypeDef* timHandle)
{

  GPIO_InitTypeDef GPIO_InitStruct;
  if(timHandle->Instance==TIM1)
  {
  /* USER CODE BEGIN TIM1_MspPostInit 0 */

  /* USER CODE END TIM1_MspPostInit 0 */
  
    /**TIM1 GPIO Configuration   
    PA7     ------> TIM1_CH1N
    */
    GPIO_InitStruct.Pin = clkk_Pin;
    GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
    GPIO_InitStruct.Pull = GPIO_NOPULL;
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
    GPIO_InitStruct.Alternate = GPIO_AF1_TIM1;
    HAL_GPIO_Init(clkk_GPIO_Port, &GPIO_InitStruct);

  /* USER CODE BEGIN TIM1_MspPostInit 1 */

  /* USER CODE END TIM1_MspPostInit 1 */
  }

}
此帖出自stm32/stm8论坛

点评

A口时钟开了吧  详情 回复 发表于 2018-9-11 09:49
 
 
 

回复

4008

帖子

0

TA的资源

版主

11
 
ZHANGXUEJIE 发表于 2018-9-11 09:37
IO口初始化了的,只是没有贴上来
void HAL_TIM_MspPostInit(TIM_HandleTypeDef* timHandle)
{

  GPI ...

A口时钟开了吧
此帖出自stm32/stm8论坛
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表