La biblioteca de firmware STM32 v3 está programada con SYSTICK, que no informa errores ni ingresa interrupciones. ¡Por favor, deme algún consejo!
"3.3.2 SysTick" en el artículo "Cómo actualizar desde la biblioteca de firmware STM32F10xxx V2.0.3 a la biblioteca de periféricos estándar STM32F10xxx V3.0.0" habla de:
En periféricos estándar, El controlador SysTick se eliminó de la biblioteca, por lo que los usuarios deben llamar a funciones definidas por CMSIS.
CMSIS solo proporciona una función para la configuración de SysTick, que reemplaza todas las funciones del controlador SysTick original de STM32.
SysTick_Config(uint32_t ticks);
Esta función establece el valor del contador de recarga automática (LOAD), la prioridad de SysTick IRQ y restablece el valor del contador (VAL) Comience a contar y active la interrupción SysTick IRQ. El reloj SysTick utiliza el reloj del sistema de forma predeterminada.
La siguiente rutina utiliza la biblioteca de firmware V2.0.3 para la configuración de SysTick:
/* Seleccione el reloj HCLK como fuente de reloj SysTick (72 MHz) */
SysTick_CLKSourceConfig (SysTick_CLKSource_HCLK);
/* Evento de fin de conteo de SysTick cada 1 ms con reloj de entrada igual a 72MHz (HCLK) */
SysTick_SetReload(72000);
/* Habilitar interrupción SysTick */
SysTick_ITConfig(ENABLE);
La siguiente rutina utiliza la biblioteca periférica estándar V3.0.0 para configurar SysTick:
/ * Configurar SysTick Timer para interrupciones de 1 ms */
if (SysTick_Config(SystemFrequency / 1000)) /* SystemFrequency se define en “system_stm32f10x.h” y es igual a la frecuencia HCLK */
{
/* Error de captura */
while (1);
}
Código de retardo de función de biblioteca 2.0
/*Inicializar reloj*/
void Init_SysTick(void)
{
/* Deshabilitar contador SysTick */ p>
SysTick_CounterCmd(SysTick_Counter_Disable);
/* Deshabilitar la interrupción de SysTick */
SysTick_ITConfig(DISABLE);
/* Configurar el reloj HCLK como fuente de reloj SysTick * /
SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8);
/* SysTick interrumpe cada 1000 Hz con HCLK igual a 72 MHz */
SysTick_SetReload(9000
);/* Habilitar la interrupción SysTick */
SysTick_ITConfig(ENABLE);
}
/*Función de retardo de 1 ms*/
__IO uint32_t TimingDelay;
void delay_ms(__IO uint32_t nTime)
{
/* Habilitar el contador SysTick */ p>
SysTick_CounterCmd(SysTick_Counter_Enable);
TimingDelay = nTime;
while(TimingDelay != 0);
/* Deshabilitar contador SysTick */
SysTick_Count
erCmd(SysTick_Counter_Disable);
/* Borrar contador SysTick */
SysTick_CounterCmd(SysTick_Counter_Clear);
}
/*stm32f10x_it. La función void SysTick_Handler(void) en c se cambia a */
extern __IO uint32_t TimingDelay;
void SysTick_Handler(void)
{
if (TimingDelay != 0x00)
{
TimingDelay--;
}
}
/*Uso, retraso 1 segundo*/
delay_ms(1000);
3.5 código de retraso de función de biblioteca
/*Reloj de inicialización*/< / p>
void Init_SysTick(void)
{
if(SysTick_Config(SystemCoreClock / 1000)) //Nota: SystemFrequency se reemplaza por SystemCoreClock en la biblioteca 3.5.
while(1);
}
/*Función de retardo de 1 ms*/
__IO uint32_t TimingDelay;
void delay_ms(__IO uint32_t nTime)
{
TimingDelay = nTime;
while(TimingDelay != 0);
}
/*La función void SysTick_Handler(void) en stm32f10x_it.c se cambia a */
extern __IO uint32_t TimingDelay;
void SysTick_Handler(void)
{
if (TimingDelay != 0x00)
{
TimingDelay--;
}
}
/*Uso, retraso 1 segundo*/
delay_ms(1000);