//*********************************************************************************************************
#include "systick.h"
void SysTick_Handler(void) __attribute__((interrupt("WCH-Interrupt-fast")));
Systick_Data ?Systick_AllData = {0};
//SysTick 初始化配置
static uint32_t SysTick_Config(uint32_tticks)
{
? ? SysTick->CTLR = 0x00000000; ? ? ? ? ? ? //控制寄存器復(fù)位
? ? SysTick->SR = 0x00000000; ? ? ? ? ? ? ? //狀態(tài)寄存器復(fù)位
? ? SysTick->CNT = 0x00000000; ? ? ? ? ? ? ?//計(jì)數(shù)器復(fù)位,設(shè)置初始值為0
? ? SysTick->CMP = ticks; ? ? ? ? ? ? ? ? ? //給重加載寄存器賦值
? ? NVIC_SetPriority(SysTicK_IRQn, 3); ? ? ?//設(shè)置SysTick中斷優(yōu)先級(jí)
? ? NVIC_EnableIRQ(SysTicK_IRQn); ? ? ? ? ? //使能開啟Systick中斷
? ? SysTick->CTLR |= 0x0000000B; ? ? ? ? ? ?//啟動(dòng)系統(tǒng)計(jì)數(shù)器STK(HCLK/8時(shí)基),向上計(jì)數(shù)到比較值后重新從 0 開始計(jì)數(shù)
? ? return (0);
}
//SysTick初始化
void Systick_Init(void)
{
? ? //此處在進(jìn)行初始化的時(shí)候設(shè)置比較寄存器的值
? ? SysTick_Config(SystemCoreClock / 8000 );//1ms ? 72M/8000/9000000 = 1/1000 = 1ms
}
//SysTick中斷
void SysTick_Handler(void)
{
? ? SysTick->SR ?= 0;//中斷標(biāo)志位清零
? ? Systick_AllData.Counting_Basis ++;
? ? if(Systick_AllData.Counting_Basis >= 1000)
? ? {
? ? ? ? GPIOB->OUTDR ^= ((uint16_t)0x0004);//反轉(zhuǎn)
? ? ? ? Systick_AllData.Counting_Basis = 0;
? ? }
}
//*****************************************************************************************************************
#include "debug.h"
#include "gpio.h"
#include "lcd.h"
#include "systick.h"
#include "timer.h"
#include "app_lcd.h"
#include "app_led.h"
int main(void)
{
? ? NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
? ? SystemCoreClockUpdate();
? ? USART_Printf_Init(115200); ?
? ? Systick_Init();
? ? TIM1_Int_Init(1000-1,144-1);
? ? Delay_Init();
? ? GPIO_LED_Init();
? ? LCD_Init();
? ? printf("SystemClk:%d\r\n",SystemCoreClock);
? ? printf("This is printf example\r\n");
? ? while(1)
? ? {
? ? ? ? Led_light();
// ? ? ?LCD_Disp();
? ? }
}