找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2970|回复: 0
收起左侧

[NUCLEO-L476RG开发] 之list菜单+红外控制

[复制链接]
ID:127084 发表于 2016-6-17 21:40 | 显示全部楼层 |阅读模式
这段时间一直在忙,所以就晚上自己加加班搞搞这块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


105150vu55omuibqmb8utc.jpg


105201te3g1ukjzm7x8zke.jpg


105213mbzi9bk2tkikm252.jpg


105225dk7l6k88xxzglg1l.jpg


105238w1584xl84b4m8tm0.jpg


105248brn9rpnzqqeievti.jpg


105917lguwrir3cpfue4xu.jpg


105928eqyje1gjq66se5qj.jpg


105939u71bt7cb1etfftqv.jpg


105952x1k4nk1b4buqqh22.jpg


110004f2d2x72esk3xwdkx.jpg


110017batdx32a9axtzkzq.jpg


110245huh9wwosn55sppow.jpg


110257x0ysy1yc5eq065wy.jpg


110308r26njvvt7jjznltu.jpg

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

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表