Diretório de artigos
Comparação de tempo com 51 microcontroladores
Atraso do microcontrolador 51 (temporização do software):
//由stc软件生成的51延时代码
void Delay500ms() //@11.0592MHz
{
unsigned char i, j, k;
_nop_();
i = 4;
j = 129;
k = 119;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
Desvantagens: impreciso, ocupando recursos da CPU
Princípio de funcionamento do temporizador stm32:
Use uma base de tempo precisa para implementar funções de temporização por meio de hardware. O núcleo do temporizador é o contador.
Classificação do temporizador:
- Temporizador básico (TIM6 ~ TIM7)
- Temporizador geral (TIM2~TIM5)
- Temporizadores avançados (TIM1 e TIM8)
Recursos do temporizador STM32F103C8T6:
Introdução geral do temporizador:
- Contador de carregamento automático para cima, para baixo, para cima/para baixo de 16 bits (TIMx_CNT).
Pré-escalador programável de 16 bits (pode ser modificado em tempo real) (TIMx_PSC), o coeficiente de divisão da frequência do relógio do contador é qualquer valor entre 1 e 65535 .- 4 canais independentes (TIMx_CH1~4), estes canais podem ser usados como:
A. Captura de entradaB
. Comparação de saída
C. Geração PWM (modo alinhado à borda ou ao centro)
D. Saída de modo de pulso único- O circuito de sincronização de temporizadores e interconexões de temporizadores (um temporizador pode ser usado para controlar outro temporizador) pode ser controlado usando sinais externos (TIMx_ETR)
.- A interrupção/DMA é gerada quando ocorrem os seguintes eventos:
A. Atualização: overflow/underflow do contador, inicialização do contador (via software ou trigger interno/externo)
B. Eventos de disparo (início, parada, inicialização ou contagem do contador acionados por interno/externo)
C. Entrada capturadaD
. Comparação de saída
E. Suporta codificador incremental (quadratura) e circuitos de sensor Hall para posicionamento
F. Acione a entrada como relógio externo ou gerenciamento de corrente ciclo a ciclo
Modo de contagem do temporizador:
Fonte do relógio temporizador:
A fórmula de cálculo do tempo de estouro do temporizador é:
(PSC é o coeficiente de divisão de frequência) (ARR é o valor de recarga) (Tout é o tempo de saída (obrigatório)) (Tclk é a frequência do clock)
Conhecido: Tclk = 72MHZ.
Por exemplo, se você deseja cronometrar 1000ms, então: PSC=7199, ARR=9999,Tclk=72M
################################################# ##########################
Recursos PWM
- Temporizador avançado (TIM1): 7 canais
- Temporizador geral (TIM2 ~ TIM4): 4 canais cada
Modo de saída PWM:
-
Modo PWM 1: Na contagem crescente, uma vez CNT < CCRx, a saída é um nível válido, caso contrário, é um nível inválido; na contagem regressiva, uma vez
CNT > CCRx, a saída é um nível inválido, caso contrário, é um nível válido. -
Modo PWM 2: Durante a contagem crescente, a saída é um nível inválido uma vez CNT < CCRx, caso contrário, é um nível válido; durante a contagem regressiva, a saída é um nível válido
uma vez CNT > CCRx, caso contrário, é um nível inválido.
Ciclo de trabalho PWM: determinado pelo registro TIMx_CCRx.
Configuração PWM (Cube Max)
//启动tim2
HAL_TIM_Base_Start_IT(&htim2);
//配置占空比
//参数:句柄,通道,值
__HAL_TIM_SetCompare(&htim4, TIM_CHANNEL_3, pwmVal);
Experimento de luz respiratória PWM
int main()
{
// 定义变量
uint16_t pwmVal=0; //调整PWM占空比
uint8_t flag=1; //设置改变方向。1:占空比越来越大;0:占空比越来越小
// 使能 Timer4 第3通道 PWM 输出
HAL_TIM_PWM_Start(&htim4,TIM_CHANNEL_3);
// while循环实现呼吸灯效果
while (1)
{
HAL_Delay(1);
if (flag)
pwmVal++;
else
pwmVal--;
if (pwmVal > 500)
flag = 0;
if (pwmVal == 0)
flag = 1;
//修改比较值,修改占空比
__HAL_TIM_SetCompare(&htim4, TIM_CHANNEL_3, pwmVal);
}
}
Terminar
Se você tiver alguma dúvida, sinta-se à vontade para levantá-la e progredir juntos.