野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 13996|回复: 1

请教一下关于F429定时器输入捕获测量频率的代码问题

[复制链接]
发表于 2018-4-25 17:14:57 | 显示全部楼层 |阅读模式
  1. void ADVANCE_TIM_IRQHandler (void)
  2. {
  3. if(TIM_GetITStatus(ADVANCE_TIM, TIM_IT_Update) != RESET){
  4. TIM_ICUserValueStructure.Capture_Period ++;
  5. TIM_ClearITPendingBit(ADVANCE_TIM, TIM_IT_Update);
  6. }

  7. if ( TIM_GetITStatus(ADVANCE_TIM, TIM_IT_CC1) != RESET)
  8. {
  9. // 第一次捕获
  10. if ( TIM_ICUserValueStructure.Capture_StartFlag == 0)
  11. {
  12. TIM_SetCounter(ADVANCE_TIM, 0);
  13. TIM_ICUserValueStructure.Capture_Period = 0;
  14. TIM_ICUserValueStructure.Capture_CcrValue = 0;
  15. TIM_ICUserValueStructure.Capture_StartFlag = 1;
  16. }else{
  17. TIM_ICUserValueStructure.Capture_CcrValue = TIM_GetCapture1(ADVANCE_TIM);
  18. TIM_ICUserValueStructure.Capture_StartFlag = 0;
  19. TIM_ICUserValueStructure.Capture_FinishFlag = 1;
  20. }

  21. TIM_ClearITPendingBit (ADVANCE_TIM,TIM_IT_CC1);
  22. }
  23. }
复制代码
  1. #ifndef __GENERAL_TIM_H
  2. #define __GENERAL_TIM_H

  3. #include "stm32f4xx.h"

  4. /* 高级控制定时器PWM输入捕获 */
  5. /* PWM输入捕获引脚 */
  6. #define ADVANCE_ICPWM_PIN GPIO_Pin_6
  7. #define ADVANCE_ICPWM_GPIO_PORT GPIOC
  8. #define ADVANCE_ICPWM_GPIO_CLK RCC_AHB1Periph_GPIOC
  9. #define ADVANCE_ICPWM_PINSOURCE GPIO_PinSource6
  10. #define ADVANCE_ICPWM_AF GPIO_AF_TIM8
  11. #define ADVANCE_IC1PWM_CHANNEL TIM_Channel_1

  12. /* 高级控制定时器 */
  13. #define ADVANCE_TIM TIM8
  14. #define ADVANCE_TIM_CLK RCC_APB2Periph_TIM8

  15. /* 捕获/比较中断 */
  16. #define ADVANCE_TIM_IRQn TIM8_CC_IRQn
  17. #define ADVANCE_TIM_IRQHandler TIM8_CC_IRQHandler

  18. typedef struct
  19. {
  20. uint8_t Capture_FinishFlag; // 捕获结束标志位
  21. uint8_t Capture_StartFlag; // 捕获开始标志位
  22. uint16_t Capture_CcrValue; // 捕获寄存器的值
  23. uint16_t Capture_Period; // 自动重装载寄存器更新标志
  24. }TIM_ICUserValueTypeDef;

  25. extern TIM_ICUserValueTypeDef TIM_ICUserValueStructure;

  26. void TIMx_Configuration(void);

  27. #endif /* __GENERAL_TIM_H */

复制代码


  1. <DIV class=blockcode>
  2. <BLOCKQUOTE>#include "bsp_advance_tim.h"

  3. TIM_ICUserValueTypeDef TIM_ICUserValueStructure = {0, 0, 0, 0};

  4. static void TIMx_GPIO_Config(void)
  5. {
  6. GPIO_InitTypeDef GPIO_InitStructure;

  7. RCC_AHB1PeriphClockCmd (ADVANCE_ICPWM_GPIO_CLK, ENABLE);
  8. GPIO_PinAFConfig(ADVANCE_ICPWM_GPIO_PORT,ADVANCE_ICPWM_PINSOURCE,ADVANCE_ICPWM_AF);

  9. GPIO_InitStructure.GPIO_Pin = ADVANCE_ICPWM_PIN;
  10. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
  11. GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
  12. GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
  13. GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;

  14. GPIO_Init(ADVANCE_ICPWM_GPIO_PORT, &GPIO_InitStructure);
  15. }

  16. static void TIMx_NVIC_Configuration(void)
  17. {
  18. NVIC_InitTypeDef NVIC_InitStructure;
  19. // 设置中断组为0
  20. NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);
  21. // 设置中断来源
  22. NVIC_InitStructure.NVIC_IRQChannel = ADVANCE_TIM_IRQn;
  23. // 设置抢占优先级
  24. NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
  25. // 设置子优先级
  26. NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;
  27. NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  28. NVIC_Init(&NVIC_InitStructure);
  29. }

  30. static void TIM_PWMINPUT_Config(void)
  31. {
  32. TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
  33. TIM_ICInitTypeDef TIM_ICInitStructure;

  34. RCC_APB2PeriphClockCmd(ADVANCE_TIM_CLK, ENABLE);

  35. TIM_TimeBaseStructure.TIM_Period = 0xFFFF-1;
  36. TIM_TimeBaseStructure.TIM_Prescaler = 1800-1;
  37. TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;
  38. TIM_TimeBaseInit(ADVANCE_TIM, &TIM_TimeBaseStructure);

  39. TIM_ICInitStructure.TIM_Channel = ADVANCE_IC1PWM_CHANNEL;
  40. TIM_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising;
  41. TIM_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI;
  42. TIM_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1;
  43. TIM_ICInitStructure.TIM_ICFilter = 0x0;
  44. TIM_ICInit(ADVANCE_TIM, &TIM_ICInitStructure);

  45. TIM_ClearFlag(ADVANCE_TIM, TIM_FLAG_Update|TIM_IT_CC1); //清除更新和捕获中断标志位
  46. TIM_ITConfig (ADVANCE_TIM, TIM_IT_Update | TIM_IT_CC1, ENABLE );//开启更新和捕获中断

  47. TIM_Cmd(ADVANCE_TIM, ENABLE);


  48. }

  49. void TIMx_Configuration(void)
  50. {
  51. TIMx_GPIO_Config();

  52. TIMx_NVIC_Configuration();

  53. TIM_PWMINPUT_Config();
  54. }

  55. /*********************************************END OF FILE**********************/
复制代码
这个是参照F103的定时器进行输入捕获测量外部信号脉冲修改的,我的作用是想测量外部信号的频率,在板子上面下载之后数据显示正确,期望大家可以帮忙看看谢谢
回复

使用道具 举报

 楼主| 发表于 2018-4-25 17:17:41 | 显示全部楼层
因为在火哥的PWM输入捕获中出现了设置定时器的复用功能,有几个函数 ,但是在F103中没有出现 ,我不知道是不是问题出现在这里,
回复 支持 反对

使用道具 举报

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

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2025-12-6 01:27 , Processed in 0.039924 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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