2024-07-11
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Este conteúdo é baseado emVídeo da tecnologia Jiangxie STM32Conteúdo, organizado.
tipo | número de série | ônibus | Função |
---|---|---|---|
Temporizador avançado | TIM1, TIM8 | APB2 | Possui todas as funções de um temporizador geral, e adicionalmente possui as funções de contador de repetições, geração de zona morta, saída complementar, entrada de freio, etc. |
Temporizador universal | TIM2, TIM3, TIM4, TIM5 | APB1 | Possui todas as funções de um temporizador básico e possui funções adicionais, como seleção de fonte de relógio interna e externa, captura de entrada, comparação de saída, interface de codificador, modo de disparo mestre-escravo, etc. |
temporizador básico | TIM6, TIM7 | APB1 | Possui as funções de interrupção programada e modo mestre acionando DAC |
A principal função:
Pré-escalador PSC
A entrada do relógio de contagem de referência é conectada antes do prescaler. Como o temporizador básico só pode selecionar o relógio interno, a linha de entrada do prescaler pode ser considerada conectada ao relógio interno (CK_INT).
A fonte do relógio interno é o TIMxCLK do RCC. O valor da frequência aqui é geralmente a frequência principal do sistema de 72 MHz.
Escrever 0 no prescaler significa que não há divisão de frequência; escrever 1 significa dividir a frequência por 2, e a frequência de saída = frequência de entrada/2 = 36MHz.
Escrever 2 significa dividir por 3 e saída = entrada/3. Portanto, o valor do prescaler difere do coeficiente de divisão de frequência real em 1, e o coeficiente de divisão de frequência real = o valor do prescaler 1. O pré-escalador tem 16 bits, portanto o valor máximo pode ser escrito como 65535, que é dividido por 65536.
Contador CNT
O contador pode contar o relógio de contagem pré-dividido. Cada vez que o relógio de contagem chega a uma borda ascendente, o valor do contador aumenta em 1. O contador também tem 16 bits, portanto o valor interno pode ser somado de 0 a 65535. Se forem adicionados mais, o contador retornará a 0 e começará novamente. Portanto, o valor do contador continuará a aumentar durante o processo de contagem. Quando o incremento atingir o valor alvo, uma interrupção será gerada e a tarefa agendada será concluída. Portanto, é necessário um registrador para armazenar o valor alvo, que é o registrador de recarga automática.
Registro de recarga automática
O registro de recarga automática também tem 16 bits e armazena o alvo de contagem a ser gravado. Durante o processo de execução, o valor de contagem continua a aumentar e o valor de recarga automática é um alvo fixo. Quando o valor de contagem é igual ao valor de recarga automática, o tempo de tempo termina. Em seguida, ele gerará um sinal de interrupção, limpará o contador e o contador iniciará automaticamente a próxima contagem.
Setas U e UI
Uma seta de desconto para cima desenhada na imagem significa que um sinal de interrupção será gerado aqui. Uma interrupção como esta, cujo valor de contagem é igual ao valor de recarga automática, é geralmente chamada de "interrupção de atualização". Esta interrupção de atualização levará ao NVIC. Assim que configurarmos o canal do temporizador do NVIC, a interrupção de atualização do temporizador será respondida pela CPU. A seta para baixo representa que um evento será gerado, e o evento correspondente aqui é chamado de "evento de atualização". Os eventos de atualização não acionam interrupções, mas podem acionar o funcionamento de outros circuitos internos.
A principal função:
Contador de acumulador de recarga automática de 16 bits para cima, para baixo, para cima/para cima
Prescaler programável de 16 bits, usado para dividir o clock de entrada por qualquer valor entre 1 e 65536
4 canais independentes:
Circuitos de sincronização que controlam temporizadores e interconexões de temporizadores usando sinais externos
A interrupção/DMA é gerada quando ocorrem os seguintes eventos:
Suporta codificador incremental (quadratura) e circuitos de sensor Hall para posicionamento
Acione a entrada como relógio externo ou gerenciamento de corrente ciclo a ciclo
Contador CNT
O contador CNT suporta modo de contagem crescente, modo de contagem regressiva e modo de alinhamento central. O modo de contagem decrescente começa a partir do valor de recarga e diminui para baixo. Depois de diminuir para 0, ele retorna ao valor de recarga e aplica uma interrupção. O modo alinhado ao centro começa em 0, primeiro aumenta para cima, conta o valor de recarga e aplica-se a uma interrupção e, em seguida, diminui para 0 e, em seguida, aplica-se a uma interrupção.
fonte de relógio
A fonte do relógio do temporizador geral pode não apenas escolher o relógio interno de 72 MHz, mas também pode escolher um relógio externo.
(1)O primeiro relógio externo é deRelógio externo no pino TIMx_ETR , ou seja, você pode conectar um relógio de onda quadrada externo ao pino ETR do TIM2, PA0, e então configurar a seleção de polaridade interna, detecção de borda e circuito pré-escalador, bem como o circuito de filtro de entrada. Esses dois circuitos podem O relógio sofre. determinada moldagem. Por ser um clock de pino externo, inevitavelmente haverá algumas falhas, então esses circuitos podem filtrar a forma de onda de entrada. O sinal filtrado é dividido em dois canais. O canal ETRF superior entra no controlador de disparo e então o relógio pode ser selecionado como unidade base de tempo. Esta estrada também é chamada de "Modo de relógio externo 2”。
(2) TRGI também pode fornecer um relógio externo , usado principalmente como entrada de disparo. Esta entrada de disparo pode acionar o modo escravo do temporizador. Quando TRGI é usado como relógio externo, esse caminho é chamado de "Modo de relógio externo 1". Quais são os relógios externos que passam por este caminho? O primeiro é o sinal do pino ETR. O segundo é o sinal ITR. Esta parte do sinal do relógio vem de outros temporizadores. O TRGO no modo mestre pode levar a outros temporizadores Ao conectar a outros temporizadores, ele é conectado aos pinos ITR de outros temporizadores ITR0 a ITR3 provenientes das saídas TRGO dos outros quatro temporizadores. Você também pode escolher TI1F_ED, que é conectado aqui à unidade de captura de entrada. Pino CH1, ou seja, o clock é obtido a partir do pino CH1. O sufixo ED (Edge) aqui significa borda. Também pode ser obtido através de TI1FP1 e TI2FP1 é o clock conectado ao pino CH1, e TI2FP2 é conectado a. o pino CH2.
Resumo: A entrada para o modo de relógio externo 1 pode ser o pino ETR, outros temporizadores, a borda do pino CH1, o pino CH1 e o pino CH2.
Circuito de comparação de saída
A parte direita abaixo é o circuito de comparação de saída. Existem quatro canais no total, correspondendo aos pinos de CH1 a CH4, que podem ser usados para gerar formas de onda PWM e acionar motores.
Circuito de captura de entrada
À esquerda está o circuito de captura de entrada, que também possui quatro canais, correspondentes aos pinos CH1 a CH4, que podem ser usados para medir a frequência da onda quadrada de entrada, etc.
capturar/comparar registro
O registro intermediário é o registro de captura/comparação, que é compartilhado pelos circuitos de captura de entrada e comparação de saída. Como a captura de entrada e a comparação de saída não podem ser usadas ao mesmo tempo, os registros aqui são compartilhados e os pinos também são compartilhados.
A principal função:
Repetir contador
A diferença de um temporizador geral: o primeiro é adicionar um contador de repetições onde a interrupção é aplicada. Com este contador é possível perceber que eventos de atualização e interrupções de atualização ocorrem apenas a cada poucos ciclos de contagem. A estrutura original é que uma atualização ocorrerá após a conclusão de cada ciclo de contagem, o que equivale a dividir o sinal de atualização de saída novamente.
Gerador de banda morta DTG e saída complementar
A seguir está a atualização do módulo de comparação de saída pelo temporizador avançado DTG (geração de tempo morto) que é um circuito de geração de zona morta. O pino de saída à direita foi alterado do original para duas saídas complementares, que podem produzir um par de ondas PWM complementares. Esses circuitos são usados para acionar motores trifásicos sem escova, como aeronaves quadricópteros, as rodas traseiras de elétricos. veículos e furadeiras elétricas Espere, pode ser um motor trifásico sem escova. Como o circuito de acionamento de um motor sem escova trifásico geralmente requer 3 braços de ponte, cada braço de ponte é controlado por 2 tubos de comutação de alta potência, portanto, são necessários um total de 6 tubos de comutação de alta potência. Portanto, os três primeiros pinos de saída PWM aqui se tornam saídas complementares. Além disso, para evitar o fenômeno de disparo de curto prazo causado pelas imperfeições do dispositivo no momento da comutação, quando a saída complementar PWM aciona o braço da ponte, um circuito de geração de zona morta é adicionado na frente. No momento em que a chave é acionada, é gerada uma zona morta de um determinado período de tempo, permitindo que os tubos superior e inferior do braço da ponte sejam desligados para evitar disparos.
entrada de freio
A última parte é a função de entrada do freio, que fornece garantia de segurança ao acionamento do motor. Se o pino externo BKIN (Break IN) gerar um sinal de freio, ou o relógio interno falhar e ocorrer uma falha, o circuito de controle cortará automaticamente a saída do motor para evitar acidentes.
Controle de operação: controle alguns bits no registro, como iniciar e parar, contagem crescente ou regressiva, etc.
O lado direito é para onde o sinal vai após o tempo de tempo terminar e a interrupção de atualização ser gerada. Se for um temporizador avançado, haverá um contador de repetição adicional. O sinal de interrupção primeiro definirá um bit de sinalização de interrupção no registro de status. Este bit de sinalização será controlado por meio da saída de interrupção e aplicará uma interrupção ao NVIC. O controle de saída de interrupção é um bit de habilitação para saída de interrupção. Se você precisar de uma interrupção, lembre-se de permiti-la.
O registro de carregamento automático foi alterado de FF para 36, e o valor alvo do valor de contagem mudou de FF para 36, portanto, após contar 36 aqui, ele será atualizado diretamente para iniciar a próxima rodada de contagem.
No meio da contagem, altere o valor alvo da contagem de F5 para 36. Há um registro de sombra abaixo. Este registro de sombra ainda é F5, então agora o alvo de contagem ainda está contando para F5, gerando um evento de atualização ao mesmo tempo, o 36 a ser alterado é passado para a sombra. registrador e na próxima contagem Essa alteração só é válida se o ciclo for 36, portanto o objetivo da introdução do registrador sombra é na verdade para sincronização, ou seja, permitir que alterações de valores e eventos de atualização ocorram de forma síncrona para evitar erros causados por alterações durante a operação.
fonte de relógio
No circuito de geração de clock, existem quatro fontes de oscilação:
(1) HSI: oscilador RC interno de alta velocidade de 8 MHz;
(2) HSE: Oscilador de cristal de quartzo externo de alta velocidade de 4 ~ 16 MHz, também conhecido como oscilador de cristal, geralmente é conectado a 8 MHz;
(3) LSE: oscilador de cristal externo de baixa velocidade de 32,768 KHz, que geralmente fornece o clock para RTC;
(4) LSI: Finalmente, existe o oscilador RC interno de baixa velocidade de 40KHz, que pode fornecer o relógio para o watchdog.
Os dois osciladores de cristal de alta velocidade acima são usados para fornecer o relógio do sistema. Os relógios de AHB, APB2 e APB1 são todos derivados desses dois osciladores de cristal de alta velocidade. oscilador RC interno, por isso geralmente é usado um oscilador de cristal externo.
Relógio de configuração ST
Na função SystemInit, ST configura o clock: primeiro ele inicia o clock interno HSI, seleciona os 8MHz internos como clock do sistema e funciona temporariamente com o clock interno de 8MHz. Em seguida, inicie o relógio externo, configure o relógio externo para entrar no loop de bloqueio de fase PLL para multiplicação de frequência, 8 MHz é multiplicado por 9 vezes e você obtém 72 MHz. Depois que a saída do loop de bloqueio de fase estiver estável, selecione o loop de bloqueio de fase. saída como o relógio do sistema, de modo que o relógio do sistema mudou de 8 MHz para 72 MHz.
Sistema de segurança de relógio CSS
CSS (sistema de segurança de relógio): O sistema de segurança de relógio também é responsável por alternar os relógios. Ele pode monitorar o status de funcionamento do relógio externo. Assim que o relógio externo falhar, ele mudará automaticamente o relógio externo de volta para o relógio interno para garantir a operação. do relógio do sistema e evitar programa preso Morte causada por acidente.
circuito de distribuição de relógio
*2
, e então no lado direito, ele é aberto separadamente para os temporizadores 2 a 7, porque o coeficiente do pré-escalador aqui é 2, então a frequência aqui precisa ser*2
, então o clock que leva aos temporizadores 2 ~ 7 é de 72 MHz. Portanto, seja um temporizador avançado, um temporizador geral ou um temporizador básico, o seu relógio de referência interno é de 72MHz.*2
. Como o coeficiente de divisão de frequência é 1, os clocks dos temporizadores 1 e 8 são de 72 MHz.// 恢复缺省配置
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);