GPIO.rar 这个例程很简单,但是延时函数的延时不怎么精确,基本延时=1/72us,修正后将其精确基本延时1ms,用SysTick来实现。
- /*******************************************************************************
- * Function Name : SysTick_Configuration
- * Description : Configures the SysTick to generate an interrupt each 1 millisecond.
- * Input : None
- * Output : None
- * Return : None
- *******************************************************************************/
- void SysTick_Configuration(void)
- {
- /* Select AHB clock(HCLK) as SysTick clock source */
- SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK);
- /* Set SysTick Priority to 3 */
- NVIC_SystemHandlerPriorityConfig(SystemHandler_SysTick, 3, 0);
-
- /* SysTick interrupt each 1ms with HCLK equal to 72MHz */
- SysTick_SetReload(72000);
- /* Enable the SysTick Interrupt */
- SysTick_ITConfig(ENABLE);
- }
- /*******************************************************************************
- * Function Name : Delay
- * Description : Inserts a delay time.
- * Input : nTime: specifies the delay time length, in milliseconds.
- * Output : None
- * Return : None
- *******************************************************************************/
- void Delay(u32 nTime)
- {
- /* Enable the SysTick Counter */
- SysTick_CounterCmd(SysTick_Counter_Enable);
-
- TimingDelay = nTime;
- while(TimingDelay != 0);
- /* Disable the SysTick Counter 经测试可以不要*/
- SysTick_CounterCmd(SysTick_Counter_Disable);
- /* Clear the SysTick Counter 经测试可以不要*/
- SysTick_CounterCmd(SysTick_Counter_Clear);
- }
中断处理程序
- /*******************************************************************************
- * Function Name : SysTickHandler
- * Description : This function handles SysTick Handler.
- * Input : None
- * Output : None
- * Return : None
- *******************************************************************************/
- void SysTickHandler(void)
- {
- TimingDelay--;
- }
GPIO_SysTick.rar 系统时钟定时器的周期与驱动的时钟频率和Reload值相关。
RCC通过AHB时钟(HCLK)8分频后作为Cortex系统定时器(SysTick)的外部时钟(这是默认的)。
驱动系统时钟定时器的时钟源有两个:HCLK或(HCLK/8默认),通过调用SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK)或SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8)选择。再用HCLK的时候需要写调用函数SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK),而(HCLK/8默认)不用。
- /* SysTick end of count event each 1ms with input clock equal to 9MHz (HCLK/8, default) */
- SysTick_SetReload(9000);
- /* Enable SysTick interrupt */
- SysTick_ITConfig(ENABLE);
阅读(1567) | 评论(0) | 转发(1) |