打印
[STM32F1]

STM32CUBEMX做输入捕获的时候,高电平时间不变

[复制链接]
297|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
如题,我用STM32CUBEMX生成的工程,做输入捕获的时候,高电平时间不变。如下图,高电平时间一直都是192us,但实际我用示波器测量的是300us和400us。
__HAL_TIM_SET_COMPARE(&htim3, TIM_CHANNEL_2, 400);//高电平为400us
__HAL_TIM_SET_COMPARE(&htim3, TIM_CHANNEL_2, 300);//高电平为300us
我只改动了上面一句,实际用示波器测量效果和代码可以对得上。
  
可是串口调试助手却一直都是显示192us不变,代码如下,求解。


int main(void)
{
  /* USER CODE BEGIN 1 */

  /* USER CODE END 1 */
  

  /* MCU Configuration--------------------------------------------------------*/

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();

  /* USER CODE BEGIN Init */

  /* USER CODE END Init */

  /* Configure the system clock */
  SystemClock_Config();

  /* USER CODE BEGIN SysInit */

  /* USER CODE END SysInit */

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_TIM3_Init();
  MX_TIM5_Init();
  MX_USART1_UART_Init();
  /* USER CODE BEGIN 2 */
          HAL_TIM_IC_Start_IT(&htim5,TIM_CHANNEL_1);        //一定要开启TIM5通道1的捕获中断
  __HAL_TIM_ENABLE_IT(&htim5,TIM_IT_UPDATE);        //一定要开启TIM5的更新中断
                HAL_TIM_PWM_Start(&htim3,TIM_CHANNEL_2);
                printf("准备开始采集高电平...\r\n");
  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
        __HAL_TIM_SET_COMPARE(&htim3, TIM_CHANNEL_2, 400);
        HAL_Delay(500);
        if(TIM5CH1_CAPTURE_STA & 0X80)
        {                //完成一次高电平捕获
                temp = TIM5CH1_CAPTURE_STA & 0X3F;
                temp *= 65536;                                //溢出总时间
                temp += TIM5CH1_CAPTURE_STA;        //总的高电平时间
                printf("高电平时间:%lld us\r\n",temp);
                TIM5CH1_CAPTURE_STA = 0;                //准备下一次捕获
        }

  }
  /* USER CODE END 3 */
}


int main(void)
{
  /* USER CODE BEGIN 1 */

  /* USER CODE END 1 */
  

  /* MCU Configuration--------------------------------------------------------*/

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();

  /* USER CODE BEGIN Init */

  /* USER CODE END Init */

  /* Configure the system clock */
  SystemClock_Config();

  /* USER CODE BEGIN SysInit */

  /* USER CODE END SysInit */

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_TIM3_Init();
  MX_TIM5_Init();
  MX_USART1_UART_Init();
  /* USER CODE BEGIN 2 */
          HAL_TIM_IC_Start_IT(&htim5,TIM_CHANNEL_1);        //一定要开启TIM5通道1的捕获中断
  __HAL_TIM_ENABLE_IT(&htim5,TIM_IT_UPDATE);        //一定要开启TIM5的更新中断
                HAL_TIM_PWM_Start(&htim3,TIM_CHANNEL_2);
                printf("准备开始采集高电平...\r\n");
  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
        __HAL_TIM_SET_COMPARE(&htim3, TIM_CHANNEL_2, 400);
        HAL_Delay(500);
        if(TIM5CH1_CAPTURE_STA & 0X80)
        {                //完成一次高电平捕获
                temp = TIM5CH1_CAPTURE_STA & 0X3F;
                temp *= 65536;                                //溢出总时间
                temp += TIM5CH1_CAPTURE_STA;        //总的高电平时间
                printf("高电平时间:%lld us\r\n",temp);
                TIM5CH1_CAPTURE_STA = 0;                //准备下一次捕获
        }

  }
  /* USER CODE END 3 */
}


使用特权

评论回复
沙发
捉虫天师| | 2020-11-4 21:25 | 只看该作者
配置没生效?

使用特权

评论回复
板凳
王小琪|  楼主 | 2020-11-4 21:40 | 只看该作者

示波器可以抓到波形,说明输出是有的。串口可以打印192us,说明串口配置也是没问题的。但是串口没有读到正确的300,400us,应该是输入捕获哪里出问题了。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

227

主题

578

帖子

6

粉丝