stm32产生100k时钟信号_stm32定时器时钟源时钟选择
stm32定时器时钟源时钟选择
有意义的参考
基础了解
时钟选择计数器时钟可由下列时钟源提供:
● 内部时钟(CK_INT)
● 外部时钟模式1:外部输入脚(TIx)
● 外部时钟模式2:外部触发输入(ETR)
● 内部触发输入(ITRx):使用一个定时器作为另一个定时器的预分频器
在平常使用中我们系统复位 000 默认使用内部时钟源
内部时钟源
从时钟选择框图中可以看到,内部时钟源(CK_INT)来自RCC的TIMx_CLK,即定时器本身的驱动时钟。
当禁止从模式控制器(TIMx_SMCR寄存器的SMS=000),则预分频的时钟源CK_PSC由内部时钟源(CK_INT)驱动。定时器的实际控制位为CEN位、DIR位和UG位,并且只能被软件修改(UG位仍被自动清除)。只要CEN位被置1,预分频器的时钟CK_PSC就由内部时钟CK_INT提供。
通用定时器的内部时钟来源于APB1总线时钟,但是通用定时器的内部时钟是根据APB1总线时钟是否分频来决定的,如果APB1总线时钟预分频系数为1,则通用定时器的内部时钟就是APB1总线时钟;但是如果APB1总线时钟的分频系数为2,则通用定时器的内部时钟就是APB1总线时钟的2倍。
下图显示了控制电路和向上计数器在一般模式下,不带预分频器时(分频系数为0)的操作。
如图所示,只有当CEN位被置位高电平的时候,预分频器的时钟CK_PSC和计数器的时钟CK_CNT才开始工作。
外部时钟源1
来自定时器自身输入通道1或通道2的输入信号,经过极性选择和滤波以后生成的触发信号,连接到从模式控制器,进而控制计数器的工作;
来自通道1的输入信号经过上升沿、下降沿双沿检测而生成的脉冲信号进行逻辑相或以后的信号就是TI1F_ED信号,即TI1F_ED双沿脉冲信号。
相关函数
TIM_TIxExternalClockConfig(TIM2, TIM_TS_TI1FP1,TIM_ICPolarity_Rising, 0);
//设置 TIMx 触发为外部时钟(从四个通道引脚引入)
//触发源选择:
//TIM_TIxExternalCLK1Source_TI1ED: 双边沿的Timer Input 1
//TIM_TIxExternalCLK1Source_TI1: 滤波后的Timer Input 1
//TIM_TIxExternalCLK1Source_TI2: 滤波后Timer Input 2
//设置输入捕获的边沿:
//TIM_ICPolarity_Rising
//TIM_ICPolarity_Falling
//TIM_ICPolarity_BothEdge
//设置滤波设置:
//必须在0x0与0xF之间
代码示例
时钟源对频率进行计数
#include "timer.h"#include"led.h"
//
//将PB5与tim2-ch1的pa0短接
pb5为时钟源对频率进行计数
voidTIM2_Int_Init( u16 arr,u16 psc ){
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
NVIC_InitTypeDef NVIC_InitStructure;
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_1;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOA,&GPIO_InitStructure);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
TIM_DeInit(TIM2);
TIM_TimeBaseStructure.TIM_Period=arr;
TIM_TimeBaseStructure.TIM_Prescaler=psc;
TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1;
TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;
TIM_TimeBaseInit(TIM2,&TIM_TimeBaseStructure);
TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE );
/*重点*/
TIM_TIxExternalClockConfig(TIM2,TIM_TIxExternalCLK1Source_TI1,TIM_ICPolarity_Falling,15);//设置输入滤波和边沿检测
TIM_Cmd(TIM2, ENABLE);
//
}voidTIM3_Int_Init(u16 arr,u16 psc){
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
NVIC_InitTypeDef NVIC_InitStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);
TIM_TimeBaseStructure.TIM_Period=arr;
TIM_TimeBaseStructure.TIM_Prescaler=psc;
TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1;
TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;
TIM_TimeBaseInit(TIM3,&TIM_TimeBaseStructure);
TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE );
NVIC_InitStructure.NVIC_IRQChannel=TIM3_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority= 0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority= 3;
NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
NVIC_Init(&NVIC_InitStructure);
TIM_Cmd(TIM3, ENABLE);
}void TIM3_IRQHandler(void){if (TIM_GetITStatus(TIM3, TIM_IT_Update)!=RESET){
LED0=!LED0;
}
TIM_ClearITPendingBit(TIM3,TIM_IT_Update);
}
#include "led.h"
#include "delay.h"
#include "key.h"
#include "sys.h"
#include "usart.h"
#include "timer.h"
int main(void)
{
delay_init(); //延时函数初始化
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
uart_init(115200); //串口初始化为115200
LED_Init(); //LED端口初始化
TIM3_Int_Init(4999,7199);//10Khz的计数频率,计数到5000为500ms
TIM2_Int_Init(10,0);
while(1)
{
//LED0=!LED0;
delay_ms(400);
printf("Count=%d\n",TIM_GetCounter(TIM2));
}
}
//TIM_TIxExternalCLK1Source_TI1: 滤波后的Timer Input 1
//TIM_TIxExternalCLK1Source_TI2: 滤波后Timer Input 2
这两个选项T1是CH1通道 T2经测试CH1与CH2通用
大概是这个异或的原因
外部时钟源模式2
来自于 外部触发脚[ETR脚] 经过极性选择、分频、滤波以后的信号,经过触发输入选择器,连接到从模式控制器。当然分频和滤波不是必需的,可以根据外来信号频率高低及信号干净度来决定。
ETR功能较全可以完成T1的工作但仅限于CH1通道,可以经行分频
相关函数
TIM_ITRxExternalClockConfig(TIM2, TIM_TS_ITR3);
//设置定时器工作于从模式,时钟源为其他定时器的输出分频.此时钟源无滤波
//TIM_TS_ITR0 TIM内部触发0 TIM1
//TIM_TS_ITR1 TIM内部触发1 TIM2
//TIM_TS_ITR2 TIM内部触发2 TIM3
//TIM_TS_ITR3 TIM内部触发3 TIM4
TIM_TS_TI1F_ED
TIM_TS_TI1FP1
TIM_TS_TI2FP2
TIM_TS_ETRF
TIM_ETRClockMode2Config(TIM2, TIM_ExtTRGPSC_DIV2,TIM_ExtTRGPolarity_NonInverted, 0x0);
//外部时钟模式1.需要设置预分频,以及外部触发极性:滤波
//TIM_ExtTRGPolarity_Inverted TIM外部触发极性翻转: 低电平或下降沿有效 //TIM_ExtTRGPolarity_NonInverted TIM外部触发极性非翻转:高电平或上升沿有效
代码示例
由第一个示例更改,功能一致main不变
voidTIM2_Int_Init( u16 arr,u16 psc ){
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
NVIC_InitTypeDef NVIC_InitStructure;
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOA,&GPIO_InitStructure);
TIM_DeInit(TIM2);
TIM_TimeBaseStructure.TIM_Period=arr;
TIM_TimeBaseStructure.TIM_Prescaler=psc;
TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1;
TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;
TIM_TimeBaseInit(TIM2,&TIM_TimeBaseStructure);
TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE );
/*重点*/
TIM_ITRxExternalClockConfig(TIM2,TIM_TS_ITR3);//高级定时器开启
TIM_ETRClockMode2Config(TIM2,TIM_ExtTRGPSC_OFF,TIM_ExtTRGPolarity_NonInverted,0)//配置外部时钟2的模式;
TIM_SetCounter( TIM2,0);
/
TIM_Cmd(TIM2, ENABLE);
}void TIM2_IRQHandler(void){if (TIM_GetITStatus(TIM2, TIM_IT_Update)!=RESET){
}
TIM_ClearITPendingBit(TIM2,TIM_IT_Update);
}
如有错误,敬请赐教。
stm32产生100k时钟信号_stm32定时器时钟源时钟选择相关推荐
- stm32产生100k时钟信号_stm32f105/107系统时钟变慢
问题:最近把之前stm32f103平台的工程拿到stm32f105平台编译,编译通过了,但是烧录运行时发现系统时钟慢了3倍左右. 我先上一张stm32的时钟树吧 1.通过打印SYSCLK=72MHz, ...
- stm32 引脚功能重复_STM32的复用时钟何时开启?
STM32的AFIO时钟真的是在开启引脚复用功能的时候开启吗?其实并不是~ 什么是复用? 我们知道,STM32有很多外设,这些外设的外部引脚都是与GPIO共用的.我们可以通过软件来配置引脚作为GPIO ...
- STM32时钟源时钟系统配置
一.在STM32中,有五个时钟源,为HSI.HSE.LSI.LSE.PLL. ①HSI是高速内部时钟,RC振荡器,频率为8MHz. ②HSE是高速外部时钟,可接石英/陶瓷谐振器,或者接外部时钟源,频率 ...
- stm32时钟树_STM32中的时钟
时序在数字电路中的作用,就像通信中用到的载波,载波并不起眼,但是很重要.时钟也一样,现象上只是某种频率波峰波谷跳动,一成不变.但是有了它,就像人类的历史有了时间轴一样,什么时候该干什么事才有了可能.程 ...
- stm32滴答计时器_stm32中的系统滴答定时器使用
系统滴答定时器对于stm32的初学者来说还是非常重要的,因为随着你学习的深入编程过程中肯定会调用延时函数,比如我之前的一些gpio相关的实验中.那么延时函数的编写也是几种方法的,一般开始接触都是让系统 ...
- stm32f103电子钟心得体会_STM32中的时钟
下面就以STM32开发板中最常见的STM32F103系列芯片的时钟为例,介绍一下STM32中的时钟. 时钟作用 说到时钟,你一定会问,这是用来计时的吗?没错,是用来计时的,但这只是它在STM32中的一 ...
- 基于STM32与ESP8266的太空人WiFi天气时钟(代码开源)
前言:本文为手把手教学ESP8266著名开源项目--太空人WiFi天气时钟,不同的是本次项目采用的是STM32作为MCU.两者开发过程中有因为各自芯片的特点(时钟频率,内存大小等),导致开发程序大不相 ...
- 时间源服务器(时间源设备)网络时间源+时钟源服务器
时间源服务器(时间源设备)网络时间源+时钟源服务器 时间源服务器(时间源设备)网络时间源+时钟源服务器 NTP网络时间源服务器产品资料 概述 NTP网络时间源服务器是一款支持NTP和SNTP网络时间源 ...
- STM32操控外设为什么要先使能时钟
STM32操控外设为什么要先使能时钟 STM32的新手,一般都会对一个问题很纠结.我也是,就是所谓的"时钟问题".我们在尽心STM32编程时,会痛苦地发现这样一个事实:不管你要干嘛 ...
- 单片机 stm32 差分升级 增量升级算法源码, 纯c编写跨平因为是程序源码
单片机 stm32 差分升级 增量升级算法源码, 纯c编写跨平因为是程序源码 IAP升级 OTA升级 物联网 车联网 适用 YID:83500653978935134Deflag
最新文章
- 线段树 (经典题目合集)
- Java 分页,两种方式的分页,即取即用的代码,不客气
- QA seven's blog
- [再寄小读者之数学篇](2014-11-26 幂等矩阵的一个充分条件)
- python降维之时间类型数据的处理_python学习笔记之使用sklearn进行PCA数据降维
- 数据结构笔记(十)-- 循环队列
- spring、spring-boot配置文件属性内容加解密
- 通达OA2017 工作流设计中“退回”功能的升级测试(图文)
- 计算机术语 谢谢,计算机术语中的TPS是什么意思
- IPV6个人使用,实测电脑ping通联通手机
- JS Worker执行多线程
- 日语动词+动词类型+动词活用
- hdu 5755 Gambler Bo 三进制高斯消元(开关问题变形)
- NLP- 关键词提取 - 综述
- 2023年全国最新机动车签字授权人精选真题及答案10
- ios android的中文翻译,苹果 iOS 14 Beta反向翻译,拒不承认iOS不如安卓
- app爬虫抓包不能抓到对应的http网络请求解决办法,以某团app为例
- TIA博途中如何为PLC分配IP地址?
- 关闭windows server 2012 IE增强的安全配置
- Daily record-December
热门文章
- 20190901每日一句 那就从现在开始吧,让生命变得更有价值
- Atitit 404错误的排查流程总结 v3 qaf
- Atitit jsr规范有多少个 407个。Jsr规范大全
- Atitit.各种 数据类型 ( 树形结构,表形数据 ) 的结构与存储数据库 attilax 总结
- atitit js 开发工具 ide的代码结构显示(func list) outline总结
- paip. java resin 远程 调试 java resin remote debug
- paip.提升安全性--CRSF跨站请求伪造的检测与防范
- Julia : SharedArrays与@async比快
- 五种开源API网关实现组件对比
- (转)最近100年全球最顶尖公司的共性