久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3791|回復: 0
打印 上一主題 下一主題
收起左側

[NUCLEO-L476RG開發] 之list菜單+紅外控制

[復制鏈接]
跳轉到指定樓層
樓主
這段時間一直在忙,所以就晚上自己加加班搞搞這塊L476RG的板子,說出來都是淚,首先自己裝的STM32CubeMX老是閃退,自己準備用TIM進行捕捉解紅外碼,調試2個周末加3個晚上終于搞定了,ST推出的庫一開始用感覺真不方便,很多地方多不懂。自己就這樣硬著頭皮慢慢啃了,后來在論壇上發現版主netlhx的《NUCLEO教程》真是新手的指路燈,再次感謝netlhx版主的資料分享。
        我這次做的是用紅外遙控可以使液晶顯示多個畫面,字庫自己做的,可以用紅外修改參數的數值并保存,有些比較重要的畫面還有要求輸入密碼,只有密碼正確才能進入,廢話不多說了,看圖吧。
       添加一些代碼,我覺得注釋還是蠻多的,詳情見附件源碼。
  1. //-------------------------------------
  2. //
  3. // 具體菜單選項定義,定義一個結構數組
  4. // 存儲在編碼區,節省內存RAM
  5. //
  6. //-------------------------------------
  7. struct Option  sOption[OPTIONMETE] = {
  8.   {0,4,13, "基本設置        ",4},    //0
  9.   {0,18,13,"反饋設置        ",4},    //1
  10.   {0,46,13,"高級設置        ",4},    //2
  11.   {0,73,13,"故障診斷        ",4},    //3
  12.   {1,OPTIONMETE-1,0,"                ",0},  //4
  13.   {1,OPTIONMETE-1,0,"  請輸入基本密碼",0},  //5
  14.   {1,OPTIONMETE-1,0,"                ",0},  //6
  15.   {1,OPTIONMETE-1,0,"                ",0},  //7
  16.   {2,OPTIONMETE-1,0,"關位確認        ",4},  //8
  17.   {2,OPTIONMETE-1,0,"開位確認        ",4},  //9
  18.   {2,OPTIONMETE-1,0,"調節死區        ",4},  //10
  19.   {2,OPTIONMETE-1,0,"丟信動作        ",4},  //11
  20.   {2,OPTIONMETE-1,0,"關過矩值        ",4},  //12
  21.   {2,OPTIONMETE-1,0,"開過矩值        ",4},  //13
  22.   {2,OPTIONMETE-1,0,"顯示方向        ",4},  //14
  23.   {2,OPTIONMETE-1,0,"現場控制        ",4},  //15
  24.   {2,OPTIONMETE-1,0,"更改基本密碼    ",6},  //16
  25.   {2,OPTIONMETE-1,0,"恢復出廠值      ",5},  //17  
  26.   {3,OPTIONMETE-1,1,"                ",0},  //18
  27.   {3,OPTIONMETE-1,1,"  請輸入反饋密碼",0},  //19
  28.   {3,OPTIONMETE-1,1,"                ",0},  //20
  29.   {3,OPTIONMETE-1,1,"                ",0},  //21
  30.   {4,OPTIONMETE-1,1,"低端微調        ",4},  //22
  31.   {4,OPTIONMETE-1,1,"高端微調        ",4},  //23
  32.   {4,27,1,"觸點輸出        ",4},    //24  
  33.   {4,27,1,"擴展觸點        ",4},    //25
  34.   {4,OPTIONMETE-1,1,"更改反饋密碼    ",6},  //26  
  35.   {5,OPTIONMETE-1,24,"關到位          ",3},     //27
  36.   {5,OPTIONMETE-1,24,"開到位          ",3},     //28
  37.   {5,OPTIONMETE-1,24,"關過矩          ",3},     //29
  38.   {5,OPTIONMETE-1,24,"開過矩          ",3},     //30
  39.   {5,OPTIONMETE-1,24,"過  矩          ",3},     //31
  40.   {5,OPTIONMETE-1,24,"正在關          ",3},     //32
  41.   {5,OPTIONMETE-1,24,"正在開          ",3},     //33
  42.   {5,OPTIONMETE-1,24,"正在運行        ",4},     //34
  43.   {5,39,24,"中間位置        ",4},   //35
  44.   {5,OPTIONMETE-1,24,"遠方位置        ",4},     //36
  45.   {5,OPTIONMETE-1,24,"現場位置        ",4},     //37
  46.   {6,OPTIONMETE-1,35,"  運行到達位置  ",0},     //38
  47.   {6,OPTIONMETE-1,35,"                ",0},     //39  
  48.   {6,OPTIONMETE-1,35,"                ",0},     //40
  49.   {6,OPTIONMETE-1,35,"                ",0},     //41  
  50.   {7,OPTIONMETE-1,24,"    故障報警    ",0},     //42
  51.   {7,OPTIONMETE-1,24,"過矩報警        ",4},     //43  
  52.   {7,OPTIONMETE-1,24,"遠方報警        ",4},     //44  
  53.   {7,OPTIONMETE-1,24,"                ",0},     //45     
  54.   {8,OPTIONMETE-1,2,"                ",0},  //46
  55.   {8,OPTIONMETE-1,2,"  請輸入高級密碼",0},  //47
  56.   {8,OPTIONMETE-1,2,"                ",0},  //48
  57.   {8,OPTIONMETE-1,2,"                ",0},  //49  
  58.   {9,OPTIONMETE-1,2,"ESD 設置        ",4},  //50
  59.   {9,OPTIONMETE-1,2,"關閉方式        ",4},  //51
  60.   {9,OPTIONMETE-1,2,"關閉方向        ",4},  //52
  61.   {9,OPTIONMETE-1,2,"正反作用        ",4},  //53
  62.   {9,OPTIONMETE-1,2,"轉矩顯示        ",4},  //54
  63.   {9,OPTIONMETE-1,2,"反饋低端        ",4},  //55
  64.   {9,OPTIONMETE-1,2,"兩線控制        ",4},  //56
  65.   {9,OPTIONMETE-1,2,"標定低信        ",4},  //57
  66.   {9,OPTIONMETE-1,2,"標定高信        ",4},  //58
  67.   {9,OPTIONMETE-1,2,"剎車制動        ",4},  //59  
  68.   {9,OPTIONMETE-1,2,"停動時間        ",4},  //60
  69.   {9,OPTIONMETE-1,2,"間斷運行        ",4},  //61
  70.   {9,OPTIONMETE-1,2,"更改高級密碼    ",6},  //62  
  71.   {9,OPTIONMETE-1,2,"基本密碼查詢    ",6},  //63
  72.   {9,OPTIONMETE-1,2,"反饋密碼查詢    ",6},  //64
  73.   {9,66,2,"保存出廠值      ",5},  //65  
  74.   {10,OPTIONMETE-1,65,"                ",0},  //66
  75.   {10,OPTIONMETE-1,65,"請輸入出廠密碼  ",0},  //67   
  76.   {10,OPTIONMETE-1,65,"                ",0},  //68
  77.   {10,OPTIONMETE-1,65,"                ",0},  //69  
  78.   {11,OPTIONMETE-1,65,"保存出廠設置    ",6},  //70   
  79.   {11,OPTIONMETE-1,65,"電源選項        ",4},  //71
  80.   {11,OPTIONMETE-1,65,"遠方保持        ",4},  //72  
  81.   {12,OPTIONMETE-1,3,"方式鈕位置      ",5},  //73
  82.   {12,OPTIONMETE-1,3,"操作鈕位置      ",5},  //74
  83.   {12,OPTIONMETE-1,3,"遠方打開信號    ",6},  //75
  84.   {12,OPTIONMETE-1,3,"遠方關閉信號    ",6},  //76
  85.   {12,OPTIONMETE-1,3,"遠方保持信號    ",6},  //77
  86.   {12,OPTIONMETE-1,3,"遠方自動信號    ",6},  //78  
  87.   {12,OPTIONMETE-1,3,"遠方ESD 信號    ",6},  //79
  88.   {12,OPTIONMETE-1,3,"控制電流        ",4},  //80
  89.   {13,OPTIONMETE-1,61,"開向始位        ",4}, //81
  90.   {13,OPTIONMETE-1,61,"開向終位        ",4}, //82
  91.   {13,OPTIONMETE-1,61,"開向動程        ",4}, //83
  92.   {13,OPTIONMETE-1,61,"開向停時        ",4}, //84
  93.   {13,OPTIONMETE-1,61,"關向始位        ",4}, //85
  94.   {13,OPTIONMETE-1,61,"關向終位        ",4}, //86
  95.   {13,OPTIONMETE-1,61,"關向動程        ",4}, //87
  96.   {13,OPTIONMETE-1,61,"關向停時        ",4}, //88
  97.   {14,OPTIONMETE-1,50,"ESD 動位        ",4}, //89  
  98.   {14,OPTIONMETE-1,50,"ESD 有效電平    ",6}, //90   
  99.   {14,OPTIONMETE-1,50,"ESD 超越過熱    ",6}, //91
  100.   {14,OPTIONMETE-1,50,"ESD 超越停止    ",6}, //92  
  101.   {14,OPTIONMETE-1,50,"ESD 超越間斷    ",6}, //93
  102.   {14,OPTIONMETE-1,50,"ESD 超越過矩    ",6}, //94  
  103.   {15,OPTIONMETE-1,56,"    兩線設置    ",0}, //95  
  104.   {15,OPTIONMETE-1,56,"有信開,無信關  ",7}, //96
  105.   {15,OPTIONMETE-1,56,"有信關,無信開  ",7}, //97  
  106.   {MENULEVEL-1,OPTIONMETE-1,0,"",0}        //98
  107. };

  108. //----------------------------------------
  109. //
  110. //  菜單上移一項函數
  111. // 函數原形:void MenuUpOneOption (void);
  112. // 沒有參數,沒有返回值
  113. // 調用方式:void MenuUpOneOption (void);
  114. //
  115. //----------------------------------------
  116. void MenuUpOneOption (void)
  117. {
  118.   if(MenuLevelStart())          //如果當前為表單第一項
  119.   {
  120.     if(Level[sOption[SelectIndex].KeyLevel][2]>=4)  //并且表單中選項數目大于等于4個
  121.     {
  122.       FirstLineDisIndex = Level[sOption[SelectIndex].KeyLevel][1]-3; //第一行顯示索引號為倒數第四項
  123.       SelectIndex = Level[sOption[SelectIndex].KeyLevel][1];         //選擇索引為表單最后一項
  124.       SelectLine = 4;             //標記選擇行為第四行
  125.       DIS12864M();               //刷新屏幕顯示
  126.     }
  127.     else            //如果選項數目并不大于四個
  128.     {
  129.       SelectIndex = Level[sOption[SelectIndex].KeyLevel][1];   //選擇索引為當前表單最后一個
  130.       SelectLine = Level[sOption[SelectIndex].KeyLevel][2];    //顯示行表單數目(最后一個)
  131.       DIS12864M();             //刷新屏幕顯示
  132.     }
  133.   }
  134.   else              //如果當前不是開始索引
  135.   {
  136.     if(SelectLine==1)           //并且已經在屏幕最上邊一行
  137.     {
  138.       FirstLineDisIndex--;      //顯示索引上移
  139.       SelectIndex--;            //選擇索引自減
  140.       SelectLine = 1;           //選擇行還是第一行
  141.       DIS12864M ();             //刷新屏幕
  142.     }
  143.     else       //如果不是第一行
  144.     {
  145.       SelectLine--;             //選擇行自減
  146.       SelectIndex--;            //選擇索引自減
  147.       DIS12864M ();             //刷新屏幕顯示
  148.     }
  149.   }
  150. }
  151. //----------------------------------------
  152. //
  153. //  菜單下移一項函數
  154. // 函數原形:void MenuDownOneOption (void);
  155. // 沒有參數,沒有返回值
  156. // 調用方式:void MenuDownOneOption (void);
  157. //
  158. //----------------------------------------
  159. void MenuDownOneOption (void)
  160. {
  161.   if(MenuLevelEnd())            //如果當前是表單最后一個索引
  162.   {
  163.     FirstLineDisIndex = Level[sOption[SelectIndex].KeyLevel][0]; //第一行顯示索引為表單第一個選項
  164.     SelectIndex = Level[sOption[SelectIndex].KeyLevel][0];       //選擇索引為表單第一個選項索引
  165.     SelectLine = 1;              //選擇行為第一行
  166.     DIS12864M ();                //刷新顯示
  167.   }
  168.   else           //如果不是最后的索引
  169.   {
  170.     if(SelectLine!=4)           //如果當前不是屏幕最底行
  171.     {
  172.       SelectIndex++;             //選擇索引自加
  173.       SelectLine++;              //選擇行下移
  174.       //  SetALineReverse (SelectLine);      //刷新選擇行
  175.       DIS12864M ();              //刷新顯示
  176.     }
  177.     else          //如果是屏幕最低行
  178.     {
  179.       FirstLineDisIndex++;      //第一行顯示下移
  180.       SelectIndex++;            //選擇索引自加
  181.       DIS12864M();              //刷新顯示
  182.     }
  183.   }
  184. }
  185. //----------------------------------------
  186. //
  187. //  菜單退出功能函數
  188. // 函數原形:void MenuCancelOption (void);
  189. // 沒有參數,沒有返回值
  190. // 調用方式:void MenuCancelOption (void);
  191. //
  192. //----------------------------------------
  193. void MenuCancelOption (void)
  194. {
  195.   if(SelectIndex != OPTIONMETE-1)  //如果不是從功能返回
  196.   {
  197.     if(CancelIndex_flag == 1 && sOption[SelectIndex].KeyLevel == 5) { CancelIndex_flag = 0; SelectIndex = 25;}
  198.     else
  199.       SelectIndex = sOption[SelectIndex].CancelIndex; //選擇索引為選項返回索引   
  200.   }
  201.   else    //如果是從功能返回
  202.     SelectIndex = LastIndex;//索引等于進入前保存索引
  203.   if(Level[sOption[SelectIndex].KeyLevel][2]>=4)      //如果返回表單選項數目大于4個
  204.   {
  205.     if(SelectIndex > Level[sOption[SelectIndex].KeyLevel][1]-3)  //根據返回選項確定顯示首項
  206.     {
  207.       FirstLineDisIndex = Level[sOption[SelectIndex].KeyLevel][1]-3;
  208.       SelectLine = 4-(Level[sOption[SelectIndex].KeyLevel][1]-SelectIndex);
  209.       DIS12864M ();        //刷新顯示
  210.     }
  211.     else  //一般顯示方式
  212.     {
  213.       FirstLineDisIndex = SelectIndex; //第一行顯示索引
  214.       SelectLine = 1;     //選擇第一行
  215.       DIS12864M ();       //刷新菜單
  216.     }
  217.   }
  218.   else   //如果返回表單選項數目不足4個
  219.   {
  220.     FirstLineDisIndex = Level[sOption[SelectIndex].KeyLevel][0];  //第一行顯示索引為表單第一項
  221.     SelectLine = SelectIndex - Level[sOption[SelectIndex].KeyLevel][0]+1; //選擇行標志為當前選擇索引對應行
  222.     DIS12864M ();         //刷新菜單
  223.   }
  224. }
復制代碼
因為之前的文件比較大,我就上傳了源代碼(未添加L4的庫),現在我已經將整個開發工程上傳到百度云(可直接編譯)。
鏈接:
游客,本帖隱藏的內容需要積分高于 1 才可瀏覽,您當前積分為 0














































main.c文件:
  1. /**
  2.   ******************************************************************************
  3.   * @file    TIM/TIM_InputCapture/Src/main.c
  4.   * @author  MCD Application Team
  5.   * @version V1.1.0
  6.   * @date    16-September-2015
  7.   * @brief   This example shows how to use the TIM peripheral to measure only
  8.   *          the frequency  of an external signal.
  9.   ******************************************************************************
  10.   * @attention
  11.   *
  12.   * [b]© COPYRIGHT(c) 2015 STMicroelectronics[/b]
  13.   *
  14.   * Redistribution and use in source and binary forms, with or without modification,
  15.   * are permitted provided that the following conditions are met:
  16.   *   1. Redistributions of source code must retain the above copyright notice,
  17.   *      this list of conditions and the following disclaimer.
  18.   *   2. Redistributions in binary form must reproduce the above copyright notice,
  19.   *      this list of conditions and the following disclaimer in the documentation
  20.   *      and/or other materials provided with the distribution.
  21.   *   3. Neither the name of STMicroelectronics nor the names of its contributors
  22.   *      may be used to endorse or promote products derived from this software
  23.   *      without specific prior written permission.
  24.   *
  25.   * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
  26.   * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  27.   * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
  28.   * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
  29.   * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  30.   * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
  31.   * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
  32.   * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  33.   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
  34.   * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  35.   *
  36.   ******************************************************************************
  37.   */

  38. /* Includes ------------------------------------------------------------------*/
  39. #include "main.h"
  40. #include "public.h"
  41. #include "lcd12864_st7567.h"
  42. #include "sys_time.h"
  43. #include "HS0038.h"
  44. /** @addtogroup STM32L4xx_HAL_Examples
  45.   * @{
  46.   */

  47. /** @addtogroup TIM_InputCapture
  48.   * @{
  49.   */

  50. /* Private typedef -----------------------------------------------------------*/
  51. /* Private define ------------------------------------------------------------*/
  52. /* Private macro -------------------------------------------------------------*/
  53. /* Private variables ---------------------------------------------------------*/

  54. /* Captured Values */
  55. uint32_t               uwIC2Value1 = 0;
  56. uint32_t               uwIC2Value2 = 0;
  57. uint32_t               uwDiffCapture = 0;

  58. /* Capture index */
  59. uint16_t               uhCaptureIndex = 0;

  60. /* Frequency Value */
  61. uint32_t               uwFrequency = 0;


  62. /* Private function prototypes -----------------------------------------------*/
  63. void SystemClock_Config(void);
  64. void Error_Handler(void);
  65. static void MX_GPIO_Init(void);
  66. extern void MenuReflash(void);
  67. /* Private functions ---------------------------------------------------------*/

  68. /**
  69.   * @brief  Main program
  70.   * @param  None
  71.   * @retval None
  72.   */
  73. int main(void)
  74. {
  75.   /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  76.   HAL_Init();

  77.   /* Configure the system clock to 72 MHz */
  78.   SystemClock_Config();

  79.   /* Configure LED2 */
  80.   BSP_LED_Init(LED2);
  81.   
  82.   /* Initialize all configured peripherals */
  83.   MX_GPIO_Init();
  84.   
  85.   /* 延時函數初始化 */
  86.   Delay_init(72);
  87.   
  88.   /* 紅外初始化 */
  89.   HS0038_init();

  90.   /* LCD初始化 */
  91.   ST7567_Init();
  92.   
  93.   /* 初始化界面 */
  94.   running_interface();

  95.   while (1)
  96.   {
  97.     if(IR_OK_flag)   //紅外控制
  98.     {  
  99.       IR_OK_flag = 0;
  100.       MenuReflash();
  101.     }
  102.         BSP_LED_Toggle(LED2);
  103.         Delay_ms(200);
  104.   }
  105. }

  106. /**
  107.   * @brief  Conversion complete callback in non blocking mode
  108.   * @param  htim : hadc handle
  109.   * @retval None
  110.   */
  111. uint8_t IR_value_old = 0;
  112. uint8_t IR_value[4]={0};
  113. uint8_t IR_OK_flag = 0;
  114. uint16_t tim_value=0;  
  115. void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim)
  116. {
  117.   static uint8_t sta_flag = 0,i=0,num=0;
  118.   static uint16_t IR_time[33]={0};
  119.          
  120.         tim_value = HAL_TIM_ReadCapturedValue(htim, TIM_CHANNEL_2);
  121.          
  122.         if( tim_value >= 1200 && tim_value<= 1500 )   //寄一個數0.01ms
  123.         { sta_flag = 1; }  
  124.         if(sta_flag)
  125.         {            
  126.           if( i <= 8 ) num = 0;
  127.           else if( i <= 16 ) num = 1;
  128.           else if( i <= 24 ) num = 2;
  129.           else if( i <= 32 ) num = 3;
  130.          
  131.           IR_value[num] <<= 1;
  132.          
  133.           if( tim_value >160 )
  134.           {
  135.                 IR_value[num] |= 0x01;            
  136.           }  
  137.           else
  138.           {
  139.                 IR_value[num] &= 0xfe;  
  140.           }
  141.          
  142.           IR_time[i++] = tim_value;
  143.          
  144.           IR_value_old = 0;
  145.           if(i>=33)
  146.           {
  147.                  i=0;
  148.                  sta_flag =0;
  149.                  if(IR_value[0]==Judgment_value)
  150.                  {
  151.                    IR_OK_flag = 1;
  152.                    IR_value_old = IR_value[3];
  153.                  }
  154.                  else
  155.                  {
  156.                    IR_value[0]=0;
  157.                    IR_value[1]=0;
  158.                    IR_value[2]=0;
  159.                    IR_value[3]=0;
  160.                  }
  161.           }     
  162.         }
  163.         TIM1->CNT = 0;
  164. }

  165. /**
  166.   * @brief  System Clock Configuration
  167.   *         The system Clock is configured as follows :
  168.   *            System Clock source            = PLL (MSI)
  169.   *            SYSCLK(Hz)                     = 72000000
  170.   *            HCLK(Hz)                       = 72000000
  171.   *            AHB Prescaler                  = 1
  172.   *            APB1 Prescaler                 = 1
  173.   *            APB2 Prescaler                 = 1
  174.   *            HSI Frequency(Hz)              = 16000000
  175.   *            PLL_M                          = 2
  176.   *            PLL_N                          = 18
  177.   *            PLL_R                          = 2
  178.   *            PLL_P                          = 7
  179.   *            PLL_Q                          = 2
  180.   *            Flash Latency(WS)              = 4
  181.   * @param  None
  182.   * @retval None
  183.   */
  184. void SystemClock_Config(void)
  185. {

  186.   RCC_OscInitTypeDef RCC_OscInitStruct;
  187.   RCC_ClkInitTypeDef RCC_ClkInitStruct;

  188.   RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI;
  189.   RCC_OscInitStruct.HSIState = RCC_HSI_ON;
  190.   RCC_OscInitStruct.HSICalibrationValue = 16;
  191.   RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
  192.   RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSI;
  193.   RCC_OscInitStruct.PLL.PLLM = 2;
  194.   RCC_OscInitStruct.PLL.PLLN = 18;
  195.   RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV7;
  196.   RCC_OscInitStruct.PLL.PLLQ = RCC_PLLQ_DIV2;
  197.   RCC_OscInitStruct.PLL.PLLR = RCC_PLLR_DIV2;
  198.   HAL_RCC_OscConfig(&RCC_OscInitStruct);

  199.   RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
  200.                               |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
  201.   RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
  202.   RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
  203.   RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;
  204.   RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
  205.   HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_4);

  206.   __PWR_CLK_ENABLE();

  207.   HAL_PWREx_ControlVoltageScaling(PWR_REGULATOR_VOLTAGE_SCALE1);

  208.   HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/1000);

  209.   HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK);

  210.   /* SysTick_IRQn interrupt configuration */
  211.   HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0);
  212. }

  213. /** Configure pins as
  214.         * Analog
  215.         * Input
  216.         * Output
  217.         * EVENT_OUT
  218.         * EXTI
  219. */
  220. void MX_GPIO_Init(void)
  221. {

  222.   GPIO_InitTypeDef GPIO_InitStruct;

  223.   /* GPIO Ports Clock Enable */
  224.   __GPIOH_CLK_ENABLE();
  225.   __GPIOC_CLK_ENABLE();
  226.   __GPIOA_CLK_ENABLE();
  227.   __GPIOB_CLK_ENABLE();

  228.   /*Configure GPIO pins : PC5 PC6 PC8 PC11 */
  229.   GPIO_InitStruct.Pin = GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_8|GPIO_PIN_11;
  230.   GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  231.   GPIO_InitStruct.Pull = GPIO_NOPULL;
  232.   GPIO_InitStruct.Speed = GPIO_SPEED_HIGH;
  233.   HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);

  234.   /*Configure GPIO pin : PA12 */
  235.   GPIO_InitStruct.Pin = GPIO_PIN_12;
  236.   GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  237.   GPIO_InitStruct.Pull = GPIO_NOPULL;
  238.   GPIO_InitStruct.Speed = GPIO_SPEED_HIGH;
  239.   HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
  240. }

  241. /**
  242.   * @brief  This function is executed in case of error occurrence.
  243.   * @param  None
  244.   * @retval None
  245.   */
  246. void Error_Handler(void)
  247. {
  248.   /* Turn LED2 on */
  249.   BSP_LED_On(LED2);
  250.   while (1)
  251.   {
  252.   }
  253. }
  254. #ifdef  USE_FULL_ASSERT

  255. /**
  256.   * @brief  Reports the name of the source file and the source line number
  257.   *         where the assert_param error has occurred.
  258.   * @param  file: pointer to the source file name
  259.   * @param  line: assert_param error line source number
  260.   * @retval None
  261.   */
  262. void assert_failed(uint8_t *file, uint32_t line)
  263. {
  264.   /* User can add his own implementation to report the file name and line number,
  265.      ex: printf("Wrong parameters value: file %s on line %d", file, line) */

  266.   /* Infinite loop */
  267.   while (1)
  268.   {
  269.   }
  270. }

  271. #endif

  272. /**
  273.   * @}
  274.   */

  275. /**
  276.   * @}
  277.   */

  278. /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
復制代碼




Lcd菜單 HS0038.rar

73.5 KB, 下載次數: 10, 下載積分: 黑幣 -5

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲一区 | 一级黄色录像片子 | 国产精品一区二区久久 | 四虎影音 | 国产黄色网址在线观看 | 亚洲视频在线观看免费 | www..99re| 中文字幕在线第一页 | 亚洲精品不卡 | 99精品一区二区 | 精品国产31久久久久久 | 91网在线观看 | 操视频网站| 日韩成人免费视频 | 亚洲综合大片69999 | 成人免费黄视频 | 欧美一区二区大片 | a级在线观看 | 欧美日韩一区在线播放 | 福利视频1000| 久久久久久久久国产 | 欧美精品一区二区三区在线 | 一级大片 | 免费看91 | 91高清免费观看 | 美女露尿口视频 | 国产一区欧美 | 在线观看国产视频 | 亚洲精品久久久蜜桃网站 | 在线观看精品 | 日韩av电影在线观看 | 99re66在线观看精品热 | 毛片1| 免费精品在线视频 | 97高清国语自产拍 | 蜜桃视频一区二区三区 | 亚洲精品久久久久久首妖 | 成人av色| 国产三区精品 | 日韩精品一区二区三区视频播放 | av大全在线 |