2024-07-11
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
이 내용은 다음을 기반으로 합니다.Jiangxie Technology STM32 비디오콘텐츠, 정리.
유형 | 일련번호 | 버스 | 기능 |
---|---|---|---|
고급 타이머 | TIM1、TIM8 | APB2 | 일반 타이머의 기능을 모두 갖고 있으며 추가적으로 반복 카운터, 데드존 생성, 보완 출력, 브레이크 입력 등의 기능을 갖고 있습니다. |
범용 타이머 | TIM2、TIM3、TIM4、TIM5 | APB1 | 기본 타이머의 모든 기능을 갖추고 있으며 내부 및 외부 클럭 소스 선택, 입력 캡처, 출력 비교, 인코더 인터페이스, 마스터-슬레이브 트리거 모드 등과 같은 추가 기능이 있습니다. |
기본 타이머 | TIM6、TIM7 | APB1 | DAC를 트리거하는 예약된 인터럽트 및 마스터 모드 기능이 있습니다. |
주요 기능:
프리스케일러 PSC
참조 카운트 클럭의 입력은 프리스케일러 앞에 연결됩니다. 기본 타이머는 내부 클럭만 선택할 수 있으므로 프리스케일러의 입력 라인은 내부 클럭(CK_INT)에 연결되어 있다고 볼 수 있다.
내부 클럭의 소스는 RCC의 TIMxCLK입니다. 여기서의 주파수 값은 일반적으로 시스템의 기본 주파수인 72MHz입니다.
프리스케일러에 0을 쓰면 주파수 분할이 없음을 의미하고, 1을 쓰면 주파수를 2로 나누는 것을 의미하며 출력 주파수 = 입력 주파수/2 = 36MHz입니다.
2를 쓴다는 것은 3으로 나누는 것을 의미하고, 출력 = 입력/3을 의미합니다. 따라서 프리스케일러의 값은 실제 주파수 분주 계수와 1만큼 차이가 나며, 실제 주파수 분주 계수 = 프리스케일러 1의 값이 됩니다. 프리스케일러는 16비트이므로 최대값은 65535로 쓸 수 있고 이를 65536으로 나눈다.
카운터CNT
카운터는 미리 분할된 카운트 클럭을 카운트할 수 있으며, 카운팅 클럭이 상승 에지에 도달할 때마다 카운터 값이 1씩 증가합니다. 카운터도 16비트이므로 내부 값을 0부터 65535까지 더할 수 있다. 더 추가되면 카운터는 0으로 돌아가서 다시 시작됩니다. 따라서 카운터 값은 계산 프로세스 중에 계속 증가합니다. 증가량이 목표 값에 도달하면 인터럽트가 생성되고 예약된 작업이 완료됩니다. 따라서 목표값을 저장하기 위한 레지스터가 필요하며, 이는 자동 리로드 레지스터이다.
자동 재로드 레지스터
자동 리로드 레지스터도 16비트이며, 기록할 카운트 대상을 저장합니다. 실행 프로세스 중에 카운트 값은 계속 증가하며 자동 재로드 값은 고정 목표입니다. 카운트 값이 자동 재로드 값과 같을 때 타이밍 시간이 초과됩니다. 그런 다음 인터럽트 신호를 생성하고 카운터를 지우며 카운터는 자동으로 다음 계산 시간을 시작합니다.
U 및 UI 화살표
그림에 그려진 상향 할인 화살표는 여기서 인터럽트 신호가 발생한다는 의미입니다. 이와 같이 카운트 값이 자동 다시 로드 값과 동일한 인터럽트를 일반적으로 "업데이트 인터럽트"라고 합니다. 이 업데이트 인터럽트는 NVIC로 이어집니다. NVIC의 타이머 채널을 구성하면 타이머의 업데이트 인터럽트가 CPU에 의해 응답됩니다. 아래쪽 화살표는 이벤트가 생성될 것임을 나타내며, 여기서 해당 이벤트를 "업데이트 이벤트"라고 합니다. 업데이트 이벤트는 인터럽트를 트리거하지 않지만 다른 내부 회로의 작업을 트리거할 수 있습니다.
주요 기능:
16비트 업, 다운, 업/업 자동 재로드 누산기 카운터
16비트 프로그래밍 가능 프리스케일러는 입력 클록을 1~65536 사이의 값으로 나누는 데 사용됩니다.
4개의 독립 채널:
외부 신호를 사용하여 타이머 및 타이머 상호 연결을 제어하는 동기화 회로
다음 이벤트가 발생할 때 인터럽트/DMA가 생성됩니다.
위치 지정을 위한 증분(구적) 인코더 및 홀 센서 회로 지원
외부 클록 또는 사이클별 전류 관리로 입력 트리거
CNT 카운터
CNT 카운터는 업 카운팅 모드, 다운 카운팅 모드, 중앙 정렬 모드를 지원합니다. 하향 카운트 모드는 다시 로드된 값부터 시작하여 0으로 감소한 후 다시 로드된 값으로 돌아가 인터럽트를 적용합니다. 중앙 정렬 모드는 0부터 시작하여 위쪽으로 증가한 후 reload 값을 카운트하여 인터럽트를 적용한 다음 아래쪽으로 0으로 감소한 후 인터럽트를 적용합니다.
클럭 소스
일반 타이머의 클럭 소스는 내부 72MHz 클럭을 선택할 수 있을 뿐만 아니라 외부 클럭도 선택할 수 있습니다.
(1)첫 번째 외부 시계는TIMx_ETR 핀의 외부 클록 즉, 외부 구형파 클럭을 TIM2, PA0의 ETR 핀에 연결한 다음 내부 극성 선택, 에지 감지 및 프리스케일러 회로와 입력 필터 회로를 구성할 수 있습니다. 이 두 회로는 클럭을 겪을 수 있습니다. 특정 성형. 외부 핀 클럭이기 때문에 필연적으로 약간의 결함이 있을 수 있으므로 이러한 회로는 입력 파형을 필터링할 수 있습니다. 필터링된 신호는 두 개의 채널로 나누어지며 상위 ETRF 채널은 트리거 컨트롤러로 들어간 다음 시계를 시간 기반 단위로 선택할 수 있습니다. 이 길은 "라고도 불립니다.외부 클록 모드 2”。
(2) TRGI는 외부 클럭도 제공할 수 있습니다. , 주로 트리거 입력으로 사용됩니다. 이 트리거 입력은 타이머의 슬레이브 모드를 트리거할 수 있습니다. TRGI를 외부 클럭으로 사용하는 경우 이 경로를 "외부 클록 모드 1". 이 채널을 통과하는 외부 클럭은 무엇입니까? 첫 번째는 ETR 핀의 신호입니다. 두 번째는 ITR 신호입니다. 클럭 신호의 이 부분은 다른 타이머에서 나옵니다. 마스터 모드의 TRGO는 다음으로 이어질 수 있습니다. 다른 타이머에 연결할 때는 다른 타이머의 ITR0부터 ITR3까지 연결되며 여기에 입력 캡처 장치에 연결된 TI1F_ED를 선택할 수도 있습니다. CH1 핀, 즉 클럭은 CH1 핀에서 얻습니다. 여기서 접미사 ED(Edge)는 TI1FP1을 통해서도 얻을 수 있으며 TI1FP2는 CH1 핀에 연결된 클럭입니다. CH2 핀.
요약: 외부 클록 모드 1에 대한 입력은 ETR 핀, 기타 타이머, CH1 핀의 에지, CH1 핀 및 CH2 핀이 될 수 있습니다.
출력 비교 회로
아래 오른쪽 부분은 출력 비교 회로로, CH1~CH4 핀에 해당하는 총 4개의 채널이 있으며, 이를 통해 PWM 파형을 출력하고 모터를 구동할 수 있습니다.
입력 캡처 회로
왼쪽에는 입력 캡처 회로가 있으며, 이 회로에는 입력 구형파 등의 주파수를 측정하는 데 사용할 수 있는 CH1 ~ CH4 핀에 해당하는 4개의 채널이 있습니다.
캡처/비교 레지스터
중간 레지스터는 입력 캡처와 출력 비교 회로가 공유하는 캡처/비교 레지스터입니다. 입력 캡처와 출력 비교를 동시에 사용할 수 없기 때문에 여기의 레지스터도 공유되고 핀도 공유됩니다.
주요 기능:
반복 카운터
일반 타이머와의 차이점: 첫 번째는 인터럽트가 적용되는 반복 카운터를 추가하는 것입니다. 이 카운터를 사용하면 업데이트 이벤트와 업데이트 인터럽트가 몇 번의 계산 주기마다 발생한다는 것을 알 수 있습니다. 원래 구조는 각 카운팅 주기가 완료된 후에 업데이트가 발생한다는 것입니다. 이는 출력 업데이트 신호를 다시 나누는 것과 같습니다.
DTG 데드밴드 생성기 및 보완 출력
다음은 고급 타이머에 의한 출력 비교 모듈의 업그레이드입니다. DTG(데드 타임 생성)는 데드존 생성 회로입니다. 오른쪽의 출력 핀은 원래의 1개에서 2개의 보완 출력으로 변경되었으며, 이는 한 쌍의 보완적인 PWM 파동을 출력할 수 있습니다. 이 회로는 쿼드콥터 항공기, 전기의 뒷바퀴와 같은 3상 브러시리스 모터를 구동하는 데 사용됩니다. 차량, 전기 드릴 등이 있습니다. 3상 브러시리스 모터일 수도 있습니다. 3상 브러시리스 모터의 구동 회로에는 일반적으로 3개의 브리지 암이 필요하기 때문에 각 브리지 암은 2개의 고출력 스위칭 튜브로 제어되므로 총 6개의 고출력 스위칭 튜브가 필요합니다. 따라서 여기에서 처음 3개의 출력 PWM 핀은 보완 출력이 됩니다. 또한, 보완 출력 PWM이 브리지 암을 구동할 때 스위칭 순간에 소자의 불완전성으로 인해 발생하는 단기적인 슛스루 현상을 방지하기 위해 데드존 생성 회로를 전면에 추가합니다. 스위치를 전환하는 순간 일정 시간 동안 데드존이 발생해 브릿지 암의 상부 튜브와 하부 튜브가 모두 꺼지도록 하여 슛스루를 방지합니다.
브레이크 입력
마지막 부분은 모터 드라이브의 안전을 보장하는 브레이크 입력 기능입니다. 외부 핀 BKIN(Break IN)이 브레이크 신호를 발생시키거나, 내부 클럭이 고장나고 이상이 발생하면 제어 회로가 자동으로 모터의 출력을 차단해 사고를 방지합니다.
작동 제어: 시작 및 중지, 카운트 업 또는 다운 등과 같은 레지스터의 일부 비트를 제어합니다.
오른쪽은 타이밍 시간이 경과하고 업데이트 인터럽트가 생성된 후 신호가 이동하는 곳입니다. 고급 타이머인 경우 추가 반복 카운터가 있습니다. 인터럽트 신호는 먼저 상태 레지스터에 인터럽트 플래그 비트를 설정하고 이 플래그 비트는 인터럽트 출력을 통해 제어되며 NVIC에 인터럽트를 적용합니다. 인터럽트 출력 제어는 인터럽트 출력을 위한 활성화 비트입니다. 인터럽트가 필요한 경우 이를 활성화해야 합니다.
자동 로딩 레지스터가 FF에서 36으로 변경되고, 카운트 값의 목표 값이 FF에서 36으로 변경되었으므로 여기서 36을 카운트한 후 바로 업데이트되어 다음 카운트 라운드를 시작하게 됩니다.
카운트 도중 카운트 목표값을 F5에서 36으로 변경합니다. 아래에 섀도우 레지스터가 있습니다. 이 섀도우 레지스터는 여전히 F5이므로 계산 대상은 여전히 F5로 계산되며 동시에 변경될 36이 섀도우에 전달됩니다. 이 변경은 주기가 36인 경우에만 유효하므로 섀도우 레지스터를 도입하는 목적은 실제로 동기화를 위한 것입니다. 즉, 값 변경 및 업데이트 이벤트가 동기적으로 발생하여 변경으로 인한 오류를 방지하기 위한 것입니다. 작동 중.
클럭 소스
클록 생성 회로에는 4개의 발진 소스가 있습니다.
(1) HSI: 내부 8MHz 고속 RC 발진기;
(2) HSE: 외부 4~16MHz 고속 수정 발진기(수정 발진기라고도 함)는 일반적으로 8MHz에 연결됩니다.
(3) LSE: 일반적으로 RTC용 클록을 제공하는 외부 32.768KHz 저속 수정 발진기.
(4) LSI: 마지막으로 감시용 클록을 제공할 수 있는 내부 40KHz 저속 RC 발진기가 있습니다.
위의 두 개의 고속 수정 발진기는 시스템 클럭을 제공하는 데 사용됩니다. AHB, APB2 및 APB1의 클럭은 모두 이 두 개의 고속 수정 발진기에서 파생됩니다. 단지 외부 수정 발진기가 내부보다 안정적이라는 것입니다. RC 발진기는 일반적으로 외부 수정 발진기를 사용합니다.
ST 구성 시계
SystemInit 기능에서 ST는 클록을 구성합니다. 먼저 내부 클록 HSI를 시작하고 내부 8MHz를 시스템 클록으로 선택한 다음 일시적으로 내부 8MHz 클록으로 실행합니다. 그런 다음 외부 클록을 시작하고 주파수 곱셈을 위해 PLL 위상 고정 루프에 들어가도록 외부 클록을 구성합니다. 8MHz를 9배로 곱하면 위상 고정 루프 출력이 안정된 후 위상 고정 루프를 선택합니다. 시스템 클록으로 출력하여 시스템 클록이 8MHz에서 72MHz로 전환됩니다.
CSS 시계 보안 시스템
CSS(시계 보안 시스템): 시계 보안 시스템은 시계 전환도 담당합니다. 외부 시계의 실행 상태를 모니터링할 수 있습니다. 외부 시계가 실패하면 자동으로 외부 시계를 내부 시계로 다시 전환하여 작동을 보장합니다. 시스템 시계의 정지 및 프로그램 중단 방지 사고로 인한 사망.
클럭 분배 회로
*2
, 그리고 오른쪽에는 타이머 2-7에 대해 별도로 열립니다. 여기서 프리스케일러 계수는 2이므로 여기의 주파수는 다음과 같아야 합니다.*2
따라서 타이머 2~7로 이어지는 클럭은 72MHz입니다. 따라서 고급 타이머, 일반 타이머, 기본 타이머 등 내부 기준 클럭은 72MHz입니다.*2
. 주파수 분할 계수가 1이므로 타이머 1과 8의 클럭은 72MHz입니다.// 恢复缺省配置
void TIM_DeInit(TIM_TypeDef* TIMx);
// 时基单元初始化
void TIM_TimeBaseInit(TIM_TypeDef* TIMx, TIM_TimeBaseInitTypeDef* TIM_TimeBaseInitStruct);
// 结构体变量赋一个默认值
void TIM_TimeBaseStructInit(TIM_TimeBaseInitTypeDef* TIM_TimeBaseInitStruct);
// 使能计数器---运行控制
void TIM_Cmd(TIM_TypeDef* TIMx, FunctionalState NewState);
// 使能中断输出---中断输出控制
void TIM_ITConfig(TIM_TypeDef* TIMx, uint16_t TIM_IT, FunctionalState NewState);
/*-----------------时基单元的时钟选择---------*/
// 选择内部时钟
void TIM_InternalClockConfig(TIM_TypeDef* TIMx);
// 选择ITRx其他定时器的时钟
void TIM_ITRxExternalClockConfig(TIM_TypeDef* TIMx, uint16_t TIM_InputTriggerSource);
// 选择TIx捕获通道的时钟
void TIM_TIxExternalClockConfig(TIM_TypeDef* TIMx, uint16_t TIM_TIxExternalCLKSource,
uint16_t TIM_ICPolarity, uint16_t ICFilter);
// 选择ETR通过外部时钟模式1输入的时钟
void TIM_ETRClockMode1Config(TIM_TypeDef* TIMx, uint16_t TIM_ExtTRGPrescaler, uint16_t TIM_ExtTRGPolarity,
uint16_t ExtTRGFilter);
// 选择ETR通过外部时钟模式2输入的时钟
void TIM_ETRClockMode2Config(TIM_TypeDef* TIMx, uint16_t TIM_ExtTRGPrescaler,
uint16_t TIM_ExtTRGPolarity, uint16_t ExtTRGFilter);
/*--------------------------------------------------------*/
// 不是用来选择时钟的,单独用来配置ETR引脚的预分频器、极性、滤波参数的
void TIM_ETRConfig(TIM_TypeDef* TIMx, uint16_t TIM_ExtTRGPrescaler, uint16_t TIM_ExtTRGPolarity,
uint16_t ExtTRGFilter);
// 用来单独写预分频值的
void TIM_PrescalerConfig(TIM_TypeDef* TIMx, uint16_t Prescaler, uint16_t TIM_PSCReloadMode);
// 用来改变计数器的计数模式
void TIM_CounterModeConfig(TIM_TypeDef* TIMx, uint16_t TIM_CounterMode);
// 自动重装器预装功能配置
void TIM_ARRPreloadConfig(TIM_TypeDef* TIMx, FunctionalState NewState);
// 给计数器写入一个值
void TIM_SetCounter(TIM_TypeDef* TIMx, uint16_t Counter);
// 给自动重装器写入一个值
void TIM_SetAutoreload(TIM_TypeDef* TIMx, uint16_t Autoreload);
// 获取当前计数器的值
uint16_t TIM_GetCounter(TIM_TypeDef* TIMx);
// 获取当前的预分频器的值
uint16_t TIM_GetPrescaler(TIM_TypeDef* TIMx);
/*-------------获取标志位和清除标志位的------------*/
FlagStatus TIM_GetFlagStatus(TIM_TypeDef* TIMx, uint16_t TIM_FLAG);
void TIM_ClearFlag(TIM_TypeDef* TIMx, uint16_t TIM_FLAG);
ITStatus TIM_GetITStatus(TIM_TypeDef* TIMx, uint16_t TIM_IT);
void TIM_ClearITPendingBit(TIM_TypeDef* TIMx, uint16_t TIM_IT);