warning: #68-D: integer conversion resulted in a change of sign
NVIC_InitStructure.NVIC_IRQChannel = SysTick_IRQn;
SysTick_IRQn是Cortex-M3处理器异常,不归NVIC管,不是一个系统的,NVIC只管STM32外设上的中断。所以故意把它定义为负数(本人臆测的),使用sys-tick中断,调用一下SysTick_Config()函数就OK了,sys-tick是在那里使能的。
unsigned 与 signed 类型的默认转换。如果不是负数或很大的数,一般就不会有问题。
void SysTick_Configuration(void) { // Initialize SysTick timer and set period at 100us. // HCLK (=SYSCLK)=120MHz // Set SysTick clock source to HCLK/8 = 15MHz SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8); // SysTick clock = 120MHz/8 = 15MHz (CTRL reg. Clear Bit 2) SysTick->LOAD = (SYSTICK_US * SYSTICK_CLK_MHz); // Set SysTick period SysTick->VAL = 0; // Clear SysTick counter SysTick->CTRL |= (SysTick_CTRL_ENABLE_Msk | SysTick_CTRL_TICKINT_Msk); // Start SysTick timer with tick interrupt enabled // It's not possible to use the following function to setup SysTick within the NVIC module because SysTick is a core function. // NVIC_InitStructure.NVIC_IRQChannel = SysTick_IRQn; // NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 3; // TIM1 (Metronome) Preemption Priority = 2 // NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1; // NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; // NVIC_Init(&NVIC_InitStructure); // Use the following Coretex M3 function instead: NVIC_SetPriority (SysTick_IRQn, (1<<__NVIC_PRIO_BITS) - 1); // // Refer to http:-//blog.csdn.-net/sunjiajiang/article/details/7741715 for details regarding pre-emption and subpriority
还有,库文件中的东西不要改。ST的库文件其实已经是只读的了,就是为了禁止修改。