1采集方波频率

/*-----------------------输入捕获----------------------------*/void gpio_configuration(void)
{/*1. 使能时钟*/rcu_periph_clock_enable(RCU_GPIOA);/*2. 使能复用时钟*/rcu_periph_clock_enable(RCU_AF);/*3. 配置 PA6 (TIMER2 CH0) 为TIM2 的CH0复用模式 */gpio_init(GPIOA, GPIO_MODE_IN_FLOATING, GPIO_OSPEED_50MHZ, GPIO_PIN_6);
}/**\brief      configure the nested vectored interrupt controller\param[in]  none\param[out] none\retval     none*/
void nvic_configuration(void)
{/* 1. 清除中断标志 */timer_interrupt_flag_clear(TIMER2,TIMER_INT_CH0);/* 使能定时器1的输入捕获中断*/timer_interrupt_enable(TIMER2,TIMER_INT_CH0);/*使能中断管理和优先级设置*/nvic_irq_enable(TIMER2_IRQn, 1, 1);}
void timer_base_configuration(void)
{rcu_periph_clock_enable(RCU_TIMER2);timer_parameter_struct timer_initpara;timer_deinit(TIMER2);/* TIMER2 configuration */timer_initpara.prescaler         = 107;timer_initpara.alignedmode       = TIMER_COUNTER_EDGE;timer_initpara.counterdirection  = TIMER_COUNTER_UP;timer_initpara.period            = 65535;timer_initpara.clockdivision     = TIMER_CKDIV_DIV1;timer_initpara.repetitioncounter = 0;timer_init(TIMER2,&timer_initpara);
}
void timer_input_capture_configuration(void)
{timer_ic_parameter_struct timer_icinitpara;/* TIMER2 CH0 输入捕获配置 */timer_icinitpara.icpolarity  = TIMER_IC_POLARITY_RISING;//捕获极性timer_icinitpara.icselection = TIMER_IC_SELECTION_DIRECTTI;//timer_icinitpara.icprescaler = TIMER_IC_PSC_DIV1;//分频timer_icinitpara.icfilter    = 0x0;//滤波timer_input_capture_config(TIMER2,TIMER_CH_0,&timer_icinitpara);/* 自动重载使能 */timer_auto_reload_shadow_enable(TIMER2);/* 使能定时器 */timer_enable(TIMER2);
}
/**/
int fre=0;//采集频率
void TIMER2_IRQHandler(void)
{static int last_cnt=0;int cur_cnt;if(SET == timer_interrupt_flag_get(TIMER2, TIMER_INT_FLAG_CH0)){/* 清除更新中断标志 */timer_interrupt_flag_clear(TIMER2, TIMER_INT_FLAG_CH0);LED2=!LED2;cur_cnt = timer_channel_capture_value_register_read(TIMER2,TIMER_CH_0);if(last_cnt ){if(cur_cnt>last_cnt){fre = 1000000/(cur_cnt-last_cnt);}else{fre = 1000000/(0xffff+cur_cnt-last_cnt);}}last_cnt = cur_cnt;}
}void input_capture()
{gpio_configuration();timer_base_configuration();nvic_configuration();timer_input_capture_configuration();
}

2输出pwm

/*定时器的基本初始化和打开更新中断enable: 是否使能定时器
*/
void time_base_init(int enable)
{/*定时器结构*/timer_parameter_struct timer_initpara;//开启定时器时钟rcu_periph_clock_enable(RCU_TIMER0);//结构体复位初始化timer_deinit(TIMER0);/* 初始化定时器结构体 */timer_struct_para_init(&timer_initpara);/* TIMER1 configuration */timer_initpara.prescaler         = 108-1;//定时器的时钟频率是108MHztimer_initpara.alignedmode       = TIMER_COUNTER_EDGE;//timer_initpara.counterdirection  = TIMER_COUNTER_UP;//向上计数timer_initpara.period            = 10000-1;//重载值timer_initpara.clockdivision     = TIMER_CKDIV_DIV1; //不分频timer_initpara.repetitioncounter = 0;//重复计数timer_init(TIMER0, &timer_initpara);if(enable)timer_enable(TIMER0);//使能定时器
}
/*通道配置
*/
void gpio_config(void)
{//使能gpio时钟rcu_periph_clock_enable(RCU_GPIOA);//使能复用时钟rcu_periph_clock_enable(RCU_AF);/*配置gpio为复用上拉状态*/gpio_init(GPIOA, GPIO_MODE_AF_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_8|GPIO_PIN_11);}void pwm_outputconfig(int enable)
{//生成pwm:timer_oc_parameter_struct timer_ocintpara;/* CH1,CH2 and CH3 configuration in PWM mode1 */timer_ocintpara.ocpolarity   = TIMER_OC_POLARITY_HIGH;//pwm 输出极性timer_ocintpara.outputstate  = TIMER_CCX_ENABLE;//输出通道使能timer_ocintpara.ocnpolarity  = TIMER_OCN_POLARITY_HIGH;//pwm互补输出极性timer_ocintpara.outputnstate = TIMER_CCXN_DISABLE;//输出通道失能timer_ocintpara.ocidlestate  = TIMER_OC_IDLE_STATE_LOW;//pwm输出通道空闲电平timer_ocintpara.ocnidlestate = TIMER_OCN_IDLE_STATE_LOW;//pwm输出互补通道空闲电平//配置指定通带timer_channel_output_config(TIMER0,TIMER_CH_0,&timer_ocintpara);timer_channel_output_config(TIMER0,TIMER_CH_3,&timer_ocintpara);/* CH0  50% */timer_channel_output_pulse_value_config(TIMER0,TIMER_CH_0,500);timer_channel_output_mode_config(TIMER0,TIMER_CH_0,TIMER_OC_MODE_PWM0);timer_channel_output_shadow_config(TIMER0,TIMER_CH_0,TIMER_OC_SHADOW_DISABLE);/* CH0  50% */timer_channel_output_pulse_value_config(TIMER0,TIMER_CH_3,500);timer_channel_output_mode_config(TIMER0,TIMER_CH_3,TIMER_OC_MODE_PWM0);timer_channel_output_shadow_config(TIMER0,TIMER_CH_3,TIMER_OC_SHADOW_DISABLE);//TIM0这句很重要,没有这句不输出pwm 如果不是高级定时器就不需要timer_primary_output_config(TIMER0,ENABLE);/* 自动重载使能 */timer_auto_reload_shadow_enable(TIMER0);/* 使能定时器 */if(enable)timer_enable(TIMER0);}
void pwm_put_init(void)
{gpio_config();//gpio初始化/* 定时器的基本配置 */time_base_init(0);pwm_outputconfig(1);//定时器初始化
}

3main()

 /* 配置系统时钟 */  systick_config();//设置中断分组nvic_priority_group_set(NVIC_PRIGROUP_PRE2_SUB2);/* gpio时钟使能*/rcu_periph_clock_enable(RCU_GPIOB);//rcu_periph_clock_enable(RCU_GPIOA);// LED gpio 初始化gpio_init(GPIOB,GPIO_MODE_OUT_PP,GPIO_OSPEED_50MHZ,GPIO_PIN_13|GPIO_PIN_14|GPIO_PIN_15);//gpio_init(GPIOA,GPIO_MODE_OUT_PP,GPIO_OSPEED_50MHZ,GPIO_PIN_8);//串口初始化usart_config();pwm_put_init();input_capture();while(1){delay_1ms(500);LED0=!LED0;printf("hello exti fre %d \r\n",fre);}

8. GD32F103C8T6 定时器-输入捕获测频率相关推荐

  1. 【STM32】【STM32CubeMX】STM32CubeMX的使用之七:定时器输入捕获实现超声波测距

    文章目录 0.前言 1.硬件设计 1.1.超声波模块 1.2.STM32L151 2.CubeMX配置 3.软件设计   下载工程文件:   https://gitee.com/Joseph_Coop ...

  2. STM32定时器输入捕获

    5.STM32定时器输入捕获 前言: STM32定时器输入捕获简介 STM32的输入捕获可以用于捕获脉宽, 测量时间 . 例如超声波测距模块就是需要用输入捕获功能, 通过测量输入脉冲的高电平脉宽 , ...

  3. STM32-通用定时器-输入捕获

    1.概述 前面,我们介绍了STM32F1的通用定时器作为PWM输出的使用方法,这一章我们向大家介绍通用定时器作为输入捕获的使用.在本章中,我们将用TIM5的通道的通道1(PA0)来做输入捕获, 捕获 ...

  4. STM32笔记 (十三)定时器输入捕获(利用定时器捕获高电平时间)

    简介 定时器的输入捕获可以用来测量脉冲宽度与PWM的输入测量,可以通过设置检测不同的跳变边沿,来实现对高低电平的计时捕获 框图 由图可知,初始化定时器进行输入捕获有以下步骤: 开启时钟,配置定时器的G ...

  5. STM32定时器-输入捕获

    定时器-输入捕获 输入捕获工作过程 一句话总结工作过程:通过检测TIMx_CHx上的边沿信号,在边沿信号发生跳变(比如上升沿/下降沿)的时候,将当前定时器的值(TIMx_CNT)存放到对应的捕获/比较 ...

  6. stm32 同一个定时器输入捕获测量双通道PWM占空比

    stm32 cubemx 输入捕获 stm32 同一个定时器输入捕获测量双通道PWM占空比 . 最近在做蓝桥杯嵌入式的真题,发现在使用TIM3的通道1和2同时测量PWM1和PWM2的占空比时,硬件是不 ...

  7. STM32笔记——定时器输入捕获功能(测量PWM的频率和占空比)

    目录 一.概述 二.输入捕获功能 2.1 输入捕获简介 2.2 输入捕获通道 三.输入捕获功能测量PWM波的频率和占空比 3.1 测量频率的方法 3.2 测量过程 一.概述 主要介绍通用定时器的输入捕 ...

  8. stm32捕获占空比_「话说定时器系列」之六:STM32定时器输入捕获话题

    STM32定时器是 ST MCU 内部最基础且常用的外设,实际应用尤为普遍.去年,电堂推出了<STM32 TIMER基础及常规应用介绍>,为大家梳理了 STM32 TIMER 的庞大内容, ...

  9. GD32定时器输入捕获例程

    官方的例程 /**\brief configure the GPIO ports\param[in] none\param[out] none\retval none*/ void gpio_conf ...

最新文章

  1. 面向接口编程详解(一)——思想基础
  2. 简易boundbox碰撞检测
  3. linux下卸载 dev sd*下硬盘,Linux 磁盘管理(示例代码)
  4. fastadmin token 验证错误_用签名保护你的隐私(4)--token生成
  5. php 生存分析,HPA数据库08.做生存分析
  6. mybatis中经典的9种设计模式
  7. 简单又复杂的人工神经网络
  8. 关于Ibatis中的executeForObject方法使用时,需要考虑空的问题!
  9. 高等数学_第一章第一节_映射与级数
  10. 创建查看mysql8.0数据库_创建和选择数据库
  11. 编程基本功:变量局部化的教训
  12. C# 图片exif信息
  13. 树莓派教程 : 树莓派各版本引脚定义
  14. [0CTF 2016]piapiapia
  15. 如何查看iOS版本?
  16. 为什么苹果蓝牙耳机连上还是公放_史上最好用的蓝牙无线耳机?苹果AirPods神奇在哪里!...
  17. 来TDengine 开发者大会,探索数据架构的迭代升级
  18. 解决 您的安全设置不允许将此应用程序安装到您的计算机上的问题
  19. 游戏策划学习:胧村正、百闻牌
  20. 网页控制430单片机

热门文章

  1. java set取最大最小_Java中取得数组中最大(小)元素的几种实现方法
  2. junit linux命令行运行,如何从命令行在JUnit中运行测试用例?
  3. java模拟时间_使用生成器模拟时间分片
  4. 机器学习集成模型ML ens学习——多层模型集成(一)
  5. 删除Dataframe前N行或后N行
  6. python读取一个目录下的文件名(不会递归往下读)
  7. Zookeeper集群搭建(涵盖命令详解)与Error contacting service. It is probably not running的问题解决
  8. html保存导入word文档格式,WordPress网站在导入Word文档时如何保持原有格式
  9. 20172315 2017-2018-2 《程序设计与数据结构》第九周学习总结
  10. jQuery--思维导图