天天看點

【學習STM32F4】第三天

昨晚上卡在晶振的配置檔案那裡了,

今天理了理思路,才發現按照25mhz的HSE的配置檔案,用在闆載8MHZ晶振上,也隻是把HCLK從168降低到53左右,這樣的頻率和fsmc的配置(0、0、2)對于ili9481來說正好,

重新替換成8MHZ的HSE的配置檔案,HCLK為168,配置FSMC為 4、0、10,可以正常工作了

今天晚上把按鍵搞定,

一個按鍵對應液晶屏上的一個位置,會發生閃爍。

使用外部中斷方式搞定

配置GPIO時鐘和SYSCFG時鐘

<pre name="code" class="cpp">RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_GPIOB | RCC_AHB1Periph_GPIOC | RCC_AHB1Periph_GPIOD | RCC_AHB1Periph_GPIOE, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);
           
<pre name="code" class="cpp">  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;       //設定管腳模式為輸入模式
  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
  GPIO_Init(GPIOA, &GPIO_InitStructure);
  
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_14;
  GPIO_Init(GPIOB, &GPIO_InitStructure);
  
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;
  GPIO_Init(GPIOC, &GPIO_InitStructure);
  
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;
  GPIO_Init(GPIOD, &GPIO_InitStructure);
  
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
  GPIO_Init(GPIOE, &GPIO_InitStructure);
           
<pre name="code" class="cpp">  SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOA, EXTI_PinSource9);
  SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOB, EXTI_PinSource14);
  SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOB, EXTI_PinSource5);
  SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOC, EXTI_PinSource13);
  SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOD, EXTI_PinSource3);
  SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOE, EXTI_PinSource6); 
           
</pre><pre name="code" class="cpp">  EXTI_InitStructure.EXTI_Line = EXTI_Line3 | EXTI_Line5 | EXTI_Line6 | EXTI_Line9 | EXTI_Line13 |EXTI_Line14;
  EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
  EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising_Falling;  
  EXTI_InitStructure.EXTI_LineCmd = ENABLE;
  EXTI_Init(&EXTI_InitStructure);
 /* Enable and set EXTI Line0 Interrupt to the lowest priority */
  NVIC_InitStructure.NVIC_IRQChannel = EXTI3_IRQn ;
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x0F;
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x0F;
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  NVIC_Init(&NVIC_InitStructure);
  
  NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQn;
  NVIC_Init(&NVIC_InitStructure);
  
  NVIC_InitStructure.NVIC_IRQChannel = EXTI15_10_IRQn;
  NVIC_Init(&NVIC_InitStructure);
           
{
  if(EXTI_GetITStatus(EXTI_Line13) != RESET)
  {
  
    count = 5;
    /* Clear the EXTI line 15 pending bit */
    EXTI_ClearITPendingBit(EXTI_Line13);
  }
  else if(EXTI_GetITStatus(EXTI_Line14) != RESET)
  {
  
    count = 2;
    /* Clear the EXTI line 15 pending bit */
    EXTI_ClearITPendingBit(EXTI_Line14);
  }
}
           

繼續閱讀