Código fuente de la biblioteca de firmware Stm32
El controlador SysTick se eliminó de la biblioteca de periféricos estándar, por lo que los usuarios deben llamar a la función definida por CMSIS.
CMSIS solo proporciona una función de configuración de SysTick, que reemplaza todas las funciones del controlador SysTick STM32 original.
sy stick _ Config(uint 32 _ t ticks);
Esta función establece el valor del contador de recarga automática (carga), la prioridad de SysTick IRQ y el contador de reinicio. (VAL), comienza a contar y activa la interrupción SysTick IRQ. De forma predeterminada, el reloj SysTick utiliza el reloj del sistema.
El siguiente programa utiliza la biblioteca de firmware V2.0.3 para configurar SysTick:
/*Seleccione el reloj HCLK como fuente de reloj SysTick (72MHz) */
sy stick _ CLKSourceConfig (sy stick _ clk source _ HCLK);
/*Cuando el reloj de entrada es igual a 72 MHz (HCLK), cada 1 ms de cuenta SysTick finaliza el evento)*/
sy stick _ set reload(72000);
/*Habilitar interrupción SysTick*/
SysTick_ITConfig (habilitar);
La siguiente rutina utiliza el biblioteca periférica estándar V3.0.0 Configurar SysTick:
/*Establecer el temporizador SysTick para una interrupción de 1 milisegundo*/
if(sy stick _ Config(frecuencia del sistema/1000))/* sistema la frecuencia está en "system_stm32f10x. h" definida en, igual a la frecuencia HCLK*/
{
/*Error de captura*/
while(1);
}
Código de retardo de función de biblioteca 2.0
/*Reloj de inicialización*/
void Init_SysTick(void)
{
/*Deshabilitar el contador SysTick*/
sy stick _ Counter MD (sy stick _ Counter _ Disable
/*Deshabilitar la interrupción de SysTick); */
SysTick_ITConfig(disabled);
/*Configurar el reloj HCLK como fuente de reloj SysTick*/
sy stick _ CLKSourceConfig(sy stick _ clk source _ HCLK _ div 8);
/*Cuando HCLK es igual a 72MHz, cada interrupción SysTick de 1000 Hz*/
sy stick _ set reload(9000);
/*Habilitar interrupción SysTick*/
SysTick_ITConfig (habilitar);
}
/*Función de retardo de 1 ms*/
_ _ IO uint32 _ t TimingDelay
Retraso_milisegundos no válido (tiempo __IO uint32_t)
{
/*Habilitar contador SysTick*/
sy stick _ Counter MD(sy stick _ Counter _ Enable);
TimingDelay = nTime
while(TimingDelay! = 0);
/*Desactivar contador SysTick*/
sy stick _ Counter MD(sy stick _ Counter _ Disable);
/*Borrar SysTick Contador*/
sy stick _ Counter MD(sy stick _ Counter _ Clear
}
/* STM 32 f 10x _ c El. La función void SysTick_Handler(void) se modifica a */
extern _ _ IO uint32 _ t TimingDelay
void SysTick_Handler(void)
{
if (TimingDelay!= 0x00)
{
retraso de tiempo-;
}
}
/*Uso, retraso 1 segundo*/
delay_ms(1000);
3.5 código de retardo de función de biblioteca
/*Reloj de inicialización*/
void Init_SysTick(void)
{
if(sy stick _ config(systemcorelock/1000))//Nota: SystemFrequency en la biblioteca 3.5 se reemplaza por systemcorelock.
while(1);
}
/*Función de retardo de 1 ms*/
_ _ IO uint32 _ t TimingDelay< / p>
Delay_ms no válido(__IO uint32_t time)
{
TimingDelay = nTime
while(TimingDelay!= 0);
p>
}
/* La función void SysTick_Handler(void) en STM 32 f 10x _ it .c se modifica a */
extern _ _ IO uint32 _ t TimingDelay
void SysTick_Handler(void)
{
if (TimingDelay!= 0x00)
{
retraso de sincronización-;
}
}
/*Uso, retraso 1 segundo*/
retraso _ ms(1000 );