|
這段時(shí)間一直在忙,所以就晚上自己加加班搞搞這塊L476RG的板子,說出來都是淚,首先自己裝的STM32CubeMX老是閃退,自己準(zhǔn)備用TIM進(jìn)行捕捉解紅外碼,調(diào)試2個(gè)周末加3個(gè)晚上終于搞定了,ST推出的庫一開始用感覺真不方便,很多地方多不懂。自己就這樣硬著頭皮慢慢啃了,后來在論壇上發(fā)現(xiàn)版主netlhx的《NUCLEO教程》真是新手的指路燈,再次感謝netlhx版主的資料分享。
我這次做的是用紅外遙控可以使液晶顯示多個(gè)畫面,字庫自己做的,可以用紅外修改參數(shù)的數(shù)值并保存,有些比較重要的畫面還有要求輸入密碼,只有密碼正確才能進(jìn)入,廢話不多說了,看圖吧。
添加一些代碼,我覺得注釋還是蠻多的,詳情見附件源碼。- //-------------------------------------
- //
- // 具體菜單選項(xiàng)定義,定義一個(gè)結(jié)構(gòu)數(shù)組
- // 存儲在編碼區(qū),節(jié)省內(nèi)存RAM
- //
- //-------------------------------------
- struct Option sOption[OPTIONMETE] = {
- {0,4,13, "基本設(shè)置 ",4}, //0
- {0,18,13,"反饋設(shè)置 ",4}, //1
- {0,46,13,"高級設(shè)置 ",4}, //2
- {0,73,13,"故障診斷 ",4}, //3
- {1,OPTIONMETE-1,0," ",0}, //4
- {1,OPTIONMETE-1,0," 請輸入基本密碼",0}, //5
- {1,OPTIONMETE-1,0," ",0}, //6
- {1,OPTIONMETE-1,0," ",0}, //7
- {2,OPTIONMETE-1,0,"關(guān)位確認(rèn) ",4}, //8
- {2,OPTIONMETE-1,0,"開位確認(rèn) ",4}, //9
- {2,OPTIONMETE-1,0,"調(diào)節(jié)死區(qū) ",4}, //10
- {2,OPTIONMETE-1,0,"丟信動作 ",4}, //11
- {2,OPTIONMETE-1,0,"關(guān)過矩值 ",4}, //12
- {2,OPTIONMETE-1,0,"開過矩值 ",4}, //13
- {2,OPTIONMETE-1,0,"顯示方向 ",4}, //14
- {2,OPTIONMETE-1,0,"現(xiàn)場控制 ",4}, //15
- {2,OPTIONMETE-1,0,"更改基本密碼 ",6}, //16
- {2,OPTIONMETE-1,0,"恢復(fù)出廠值 ",5}, //17
- {3,OPTIONMETE-1,1," ",0}, //18
- {3,OPTIONMETE-1,1," 請輸入反饋密碼",0}, //19
- {3,OPTIONMETE-1,1," ",0}, //20
- {3,OPTIONMETE-1,1," ",0}, //21
- {4,OPTIONMETE-1,1,"低端微調(diào) ",4}, //22
- {4,OPTIONMETE-1,1,"高端微調(diào) ",4}, //23
- {4,27,1,"觸點(diǎn)輸出 ",4}, //24
- {4,27,1,"擴(kuò)展觸點(diǎn) ",4}, //25
- {4,OPTIONMETE-1,1,"更改反饋密碼 ",6}, //26
- {5,OPTIONMETE-1,24,"關(guān)到位 ",3}, //27
- {5,OPTIONMETE-1,24,"開到位 ",3}, //28
- {5,OPTIONMETE-1,24,"關(guān)過矩 ",3}, //29
- {5,OPTIONMETE-1,24,"開過矩 ",3}, //30
- {5,OPTIONMETE-1,24,"過 矩 ",3}, //31
- {5,OPTIONMETE-1,24,"正在關(guān) ",3}, //32
- {5,OPTIONMETE-1,24,"正在開 ",3}, //33
- {5,OPTIONMETE-1,24,"正在運(yùn)行 ",4}, //34
- {5,39,24,"中間位置 ",4}, //35
- {5,OPTIONMETE-1,24,"遠(yuǎn)方位置 ",4}, //36
- {5,OPTIONMETE-1,24,"現(xiàn)場位置 ",4}, //37
- {6,OPTIONMETE-1,35," 運(yùn)行到達(dá)位置 ",0}, //38
- {6,OPTIONMETE-1,35," ",0}, //39
- {6,OPTIONMETE-1,35," ",0}, //40
- {6,OPTIONMETE-1,35," ",0}, //41
- {7,OPTIONMETE-1,24," 故障報(bào)警 ",0}, //42
- {7,OPTIONMETE-1,24,"過矩報(bào)警 ",4}, //43
- {7,OPTIONMETE-1,24,"遠(yuǎn)方報(bào)警 ",4}, //44
- {7,OPTIONMETE-1,24," ",0}, //45
- {8,OPTIONMETE-1,2," ",0}, //46
- {8,OPTIONMETE-1,2," 請輸入高級密碼",0}, //47
- {8,OPTIONMETE-1,2," ",0}, //48
- {8,OPTIONMETE-1,2," ",0}, //49
- {9,OPTIONMETE-1,2,"ESD 設(shè)置 ",4}, //50
- {9,OPTIONMETE-1,2,"關(guān)閉方式 ",4}, //51
- {9,OPTIONMETE-1,2,"關(guān)閉方向 ",4}, //52
- {9,OPTIONMETE-1,2,"正反作用 ",4}, //53
- {9,OPTIONMETE-1,2,"轉(zhuǎn)矩顯示 ",4}, //54
- {9,OPTIONMETE-1,2,"反饋低端 ",4}, //55
- {9,OPTIONMETE-1,2,"兩線控制 ",4}, //56
- {9,OPTIONMETE-1,2,"標(biāo)定低信 ",4}, //57
- {9,OPTIONMETE-1,2,"標(biāo)定高信 ",4}, //58
- {9,OPTIONMETE-1,2,"剎車制動 ",4}, //59
- {9,OPTIONMETE-1,2,"停動時(shí)間 ",4}, //60
- {9,OPTIONMETE-1,2,"間斷運(yùn)行 ",4}, //61
- {9,OPTIONMETE-1,2,"更改高級密碼 ",6}, //62
- {9,OPTIONMETE-1,2,"基本密碼查詢 ",6}, //63
- {9,OPTIONMETE-1,2,"反饋密碼查詢 ",6}, //64
- {9,66,2,"保存出廠值 ",5}, //65
- {10,OPTIONMETE-1,65," ",0}, //66
- {10,OPTIONMETE-1,65,"請輸入出廠密碼 ",0}, //67
- {10,OPTIONMETE-1,65," ",0}, //68
- {10,OPTIONMETE-1,65," ",0}, //69
- {11,OPTIONMETE-1,65,"保存出廠設(shè)置 ",6}, //70
- {11,OPTIONMETE-1,65,"電源選項(xiàng) ",4}, //71
- {11,OPTIONMETE-1,65,"遠(yuǎn)方保持 ",4}, //72
- {12,OPTIONMETE-1,3,"方式鈕位置 ",5}, //73
- {12,OPTIONMETE-1,3,"操作鈕位置 ",5}, //74
- {12,OPTIONMETE-1,3,"遠(yuǎn)方打開信號 ",6}, //75
- {12,OPTIONMETE-1,3,"遠(yuǎn)方關(guān)閉信號 ",6}, //76
- {12,OPTIONMETE-1,3,"遠(yuǎn)方保持信號 ",6}, //77
- {12,OPTIONMETE-1,3,"遠(yuǎn)方自動信號 ",6}, //78
- {12,OPTIONMETE-1,3,"遠(yuǎn)方ESD 信號 ",6}, //79
- {12,OPTIONMETE-1,3,"控制電流 ",4}, //80
- {13,OPTIONMETE-1,61,"開向始位 ",4}, //81
- {13,OPTIONMETE-1,61,"開向終位 ",4}, //82
- {13,OPTIONMETE-1,61,"開向動程 ",4}, //83
- {13,OPTIONMETE-1,61,"開向停時(shí) ",4}, //84
- {13,OPTIONMETE-1,61,"關(guān)向始位 ",4}, //85
- {13,OPTIONMETE-1,61,"關(guān)向終位 ",4}, //86
- {13,OPTIONMETE-1,61,"關(guān)向動程 ",4}, //87
- {13,OPTIONMETE-1,61,"關(guān)向停時(shí) ",4}, //88
- {14,OPTIONMETE-1,50,"ESD 動位 ",4}, //89
- {14,OPTIONMETE-1,50,"ESD 有效電平 ",6}, //90
- {14,OPTIONMETE-1,50,"ESD 超越過熱 ",6}, //91
- {14,OPTIONMETE-1,50,"ESD 超越停止 ",6}, //92
- {14,OPTIONMETE-1,50,"ESD 超越間斷 ",6}, //93
- {14,OPTIONMETE-1,50,"ESD 超越過矩 ",6}, //94
- {15,OPTIONMETE-1,56," 兩線設(shè)置 ",0}, //95
- {15,OPTIONMETE-1,56,"有信開,無信關(guān) ",7}, //96
- {15,OPTIONMETE-1,56,"有信關(guān),無信開 ",7}, //97
- {MENULEVEL-1,OPTIONMETE-1,0,"",0} //98
- };
- //----------------------------------------
- //
- // 菜單上移一項(xiàng)函數(shù)
- // 函數(shù)原形:void MenuUpOneOption (void);
- // 沒有參數(shù),沒有返回值
- // 調(diào)用方式:void MenuUpOneOption (void);
- //
- //----------------------------------------
- void MenuUpOneOption (void)
- {
- if(MenuLevelStart()) //如果當(dāng)前為表單第一項(xiàng)
- {
- if(Level[sOption[SelectIndex].KeyLevel][2]>=4) //并且表單中選項(xiàng)數(shù)目大于等于4個(gè)
- {
- FirstLineDisIndex = Level[sOption[SelectIndex].KeyLevel][1]-3; //第一行顯示索引號為倒數(shù)第四項(xiàng)
- SelectIndex = Level[sOption[SelectIndex].KeyLevel][1]; //選擇索引為表單最后一項(xiàng)
- SelectLine = 4; //標(biāo)記選擇行為第四行
- DIS12864M(); //刷新屏幕顯示
- }
- else //如果選項(xiàng)數(shù)目并不大于四個(gè)
- {
- SelectIndex = Level[sOption[SelectIndex].KeyLevel][1]; //選擇索引為當(dāng)前表單最后一個(gè)
- SelectLine = Level[sOption[SelectIndex].KeyLevel][2]; //顯示行表單數(shù)目(最后一個(gè))
- DIS12864M(); //刷新屏幕顯示
- }
- }
- else //如果當(dāng)前不是開始索引
- {
- if(SelectLine==1) //并且已經(jīng)在屏幕最上邊一行
- {
- FirstLineDisIndex--; //顯示索引上移
- SelectIndex--; //選擇索引自減
- SelectLine = 1; //選擇行還是第一行
- DIS12864M (); //刷新屏幕
- }
- else //如果不是第一行
- {
- SelectLine--; //選擇行自減
- SelectIndex--; //選擇索引自減
- DIS12864M (); //刷新屏幕顯示
- }
- }
- }
- //----------------------------------------
- //
- // 菜單下移一項(xiàng)函數(shù)
- // 函數(shù)原形:void MenuDownOneOption (void);
- // 沒有參數(shù),沒有返回值
- // 調(diào)用方式:void MenuDownOneOption (void);
- //
- //----------------------------------------
- void MenuDownOneOption (void)
- {
- if(MenuLevelEnd()) //如果當(dāng)前是表單最后一個(gè)索引
- {
- FirstLineDisIndex = Level[sOption[SelectIndex].KeyLevel][0]; //第一行顯示索引為表單第一個(gè)選項(xiàng)
- SelectIndex = Level[sOption[SelectIndex].KeyLevel][0]; //選擇索引為表單第一個(gè)選項(xiàng)索引
- SelectLine = 1; //選擇行為第一行
- DIS12864M (); //刷新顯示
- }
- else //如果不是最后的索引
- {
- if(SelectLine!=4) //如果當(dāng)前不是屏幕最底行
- {
- SelectIndex++; //選擇索引自加
- SelectLine++; //選擇行下移
- // SetALineReverse (SelectLine); //刷新選擇行
- DIS12864M (); //刷新顯示
- }
- else //如果是屏幕最低行
- {
- FirstLineDisIndex++; //第一行顯示下移
- SelectIndex++; //選擇索引自加
- DIS12864M(); //刷新顯示
- }
- }
- }
- //----------------------------------------
- //
- // 菜單退出功能函數(shù)
- // 函數(shù)原形:void MenuCancelOption (void);
- // 沒有參數(shù),沒有返回值
- // 調(diào)用方式:void MenuCancelOption (void);
- //
- //----------------------------------------
- void MenuCancelOption (void)
- {
- if(SelectIndex != OPTIONMETE-1) //如果不是從功能返回
- {
- if(CancelIndex_flag == 1 && sOption[SelectIndex].KeyLevel == 5) { CancelIndex_flag = 0; SelectIndex = 25;}
- else
- SelectIndex = sOption[SelectIndex].CancelIndex; //選擇索引為選項(xiàng)返回索引
- }
- else //如果是從功能返回
- SelectIndex = LastIndex;//索引等于進(jìn)入前保存索引
- if(Level[sOption[SelectIndex].KeyLevel][2]>=4) //如果返回表單選項(xiàng)數(shù)目大于4個(gè)
- {
- if(SelectIndex > Level[sOption[SelectIndex].KeyLevel][1]-3) //根據(jù)返回選項(xiàng)確定顯示首項(xiàng)
- {
- FirstLineDisIndex = Level[sOption[SelectIndex].KeyLevel][1]-3;
- SelectLine = 4-(Level[sOption[SelectIndex].KeyLevel][1]-SelectIndex);
- DIS12864M (); //刷新顯示
- }
- else //一般顯示方式
- {
- FirstLineDisIndex = SelectIndex; //第一行顯示索引
- SelectLine = 1; //選擇第一行
- DIS12864M (); //刷新菜單
- }
- }
- else //如果返回表單選項(xiàng)數(shù)目不足4個(gè)
- {
- FirstLineDisIndex = Level[sOption[SelectIndex].KeyLevel][0]; //第一行顯示索引為表單第一項(xiàng)
- SelectLine = SelectIndex - Level[sOption[SelectIndex].KeyLevel][0]+1; //選擇行標(biāo)志為當(dāng)前選擇索引對應(yīng)行
- DIS12864M (); //刷新菜單
- }
- }
復(fù)制代碼 因?yàn)橹暗奈募容^大,我就上傳了源代碼(未添加L4的庫),現(xiàn)在我已經(jīng)將整個(gè)開發(fā)工程上傳到百度云(可直接編譯)。
鏈接:游客,本帖隱藏的內(nèi)容需要積分高于 1 才可瀏覽,您當(dāng)前積分為 0
main.c文件:
- /**
- ******************************************************************************
- * @file TIM/TIM_InputCapture/Src/main.c
- * @author MCD Application Team
- * @version V1.1.0
- * @date 16-September-2015
- * @brief This example shows how to use the TIM peripheral to measure only
- * the frequency of an external signal.
- ******************************************************************************
- * @attention
- *
- * [b]© COPYRIGHT(c) 2015 STMicroelectronics[/b]
- *
- * Redistribution and use in source and binary forms, with or without modification,
- * are permitted provided that the following conditions are met:
- * 1. Redistributions of source code must retain the above copyright notice,
- * this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright notice,
- * this list of conditions and the following disclaimer in the documentation
- * and/or other materials provided with the distribution.
- * 3. Neither the name of STMicroelectronics nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
- * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- ******************************************************************************
- */
- /* Includes ------------------------------------------------------------------*/
- #include "main.h"
- #include "public.h"
- #include "lcd12864_st7567.h"
- #include "sys_time.h"
- #include "HS0038.h"
- /** @addtogroup STM32L4xx_HAL_Examples
- * @{
- */
- /** @addtogroup TIM_InputCapture
- * @{
- */
- /* Private typedef -----------------------------------------------------------*/
- /* Private define ------------------------------------------------------------*/
- /* Private macro -------------------------------------------------------------*/
- /* Private variables ---------------------------------------------------------*/
- /* Captured Values */
- uint32_t uwIC2Value1 = 0;
- uint32_t uwIC2Value2 = 0;
- uint32_t uwDiffCapture = 0;
- /* Capture index */
- uint16_t uhCaptureIndex = 0;
- /* Frequency Value */
- uint32_t uwFrequency = 0;
- /* Private function prototypes -----------------------------------------------*/
- void SystemClock_Config(void);
- void Error_Handler(void);
- static void MX_GPIO_Init(void);
- extern void MenuReflash(void);
- /* Private functions ---------------------------------------------------------*/
- /**
- * @brief Main program
- * @param None
- * @retval None
- */
- int main(void)
- {
- /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
- HAL_Init();
- /* Configure the system clock to 72 MHz */
- SystemClock_Config();
- /* Configure LED2 */
- BSP_LED_Init(LED2);
-
- /* Initialize all configured peripherals */
- MX_GPIO_Init();
-
- /* 延時(shí)函數(shù)初始化 */
- Delay_init(72);
-
- /* 紅外初始化 */
- HS0038_init();
- /* LCD初始化 */
- ST7567_Init();
-
- /* 初始化界面 */
- running_interface();
- while (1)
- {
- if(IR_OK_flag) //紅外控制
- {
- IR_OK_flag = 0;
- MenuReflash();
- }
- BSP_LED_Toggle(LED2);
- Delay_ms(200);
- }
- }
- /**
- * @brief Conversion complete callback in non blocking mode
- * @param htim : hadc handle
- * @retval None
- */
- uint8_t IR_value_old = 0;
- uint8_t IR_value[4]={0};
- uint8_t IR_OK_flag = 0;
- uint16_t tim_value=0;
- void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim)
- {
- static uint8_t sta_flag = 0,i=0,num=0;
- static uint16_t IR_time[33]={0};
-
- tim_value = HAL_TIM_ReadCapturedValue(htim, TIM_CHANNEL_2);
-
- if( tim_value >= 1200 && tim_value<= 1500 ) //寄一個(gè)數(shù)0.01ms
- { sta_flag = 1; }
- if(sta_flag)
- {
- if( i <= 8 ) num = 0;
- else if( i <= 16 ) num = 1;
- else if( i <= 24 ) num = 2;
- else if( i <= 32 ) num = 3;
-
- IR_value[num] <<= 1;
-
- if( tim_value >160 )
- {
- IR_value[num] |= 0x01;
- }
- else
- {
- IR_value[num] &= 0xfe;
- }
-
- IR_time[i++] = tim_value;
-
- IR_value_old = 0;
- if(i>=33)
- {
- i=0;
- sta_flag =0;
- if(IR_value[0]==Judgment_value)
- {
- IR_OK_flag = 1;
- IR_value_old = IR_value[3];
- }
- else
- {
- IR_value[0]=0;
- IR_value[1]=0;
- IR_value[2]=0;
- IR_value[3]=0;
- }
- }
- }
- TIM1->CNT = 0;
- }
- /**
- * @brief System Clock Configuration
- * The system Clock is configured as follows :
- * System Clock source = PLL (MSI)
- * SYSCLK(Hz) = 72000000
- * HCLK(Hz) = 72000000
- * AHB Prescaler = 1
- * APB1 Prescaler = 1
- * APB2 Prescaler = 1
- * HSI Frequency(Hz) = 16000000
- * PLL_M = 2
- * PLL_N = 18
- * PLL_R = 2
- * PLL_P = 7
- * PLL_Q = 2
- * Flash Latency(WS) = 4
- * @param None
- * @retval None
- */
- void SystemClock_Config(void)
- {
- RCC_OscInitTypeDef RCC_OscInitStruct;
- RCC_ClkInitTypeDef RCC_ClkInitStruct;
- RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI;
- RCC_OscInitStruct.HSIState = RCC_HSI_ON;
- RCC_OscInitStruct.HSICalibrationValue = 16;
- RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
- RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSI;
- RCC_OscInitStruct.PLL.PLLM = 2;
- RCC_OscInitStruct.PLL.PLLN = 18;
- RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV7;
- RCC_OscInitStruct.PLL.PLLQ = RCC_PLLQ_DIV2;
- RCC_OscInitStruct.PLL.PLLR = RCC_PLLR_DIV2;
- HAL_RCC_OscConfig(&RCC_OscInitStruct);
- RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
- |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
- RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
- RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
- RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;
- RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
- HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_4);
- __PWR_CLK_ENABLE();
- HAL_PWREx_ControlVoltageScaling(PWR_REGULATOR_VOLTAGE_SCALE1);
- HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/1000);
- HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK);
- /* SysTick_IRQn interrupt configuration */
- HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0);
- }
- /** Configure pins as
- * Analog
- * Input
- * Output
- * EVENT_OUT
- * EXTI
- */
- void MX_GPIO_Init(void)
- {
- GPIO_InitTypeDef GPIO_InitStruct;
- /* GPIO Ports Clock Enable */
- __GPIOH_CLK_ENABLE();
- __GPIOC_CLK_ENABLE();
- __GPIOA_CLK_ENABLE();
- __GPIOB_CLK_ENABLE();
- /*Configure GPIO pins : PC5 PC6 PC8 PC11 */
- GPIO_InitStruct.Pin = GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_8|GPIO_PIN_11;
- GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
- GPIO_InitStruct.Pull = GPIO_NOPULL;
- GPIO_InitStruct.Speed = GPIO_SPEED_HIGH;
- HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
- /*Configure GPIO pin : PA12 */
- GPIO_InitStruct.Pin = GPIO_PIN_12;
- GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
- GPIO_InitStruct.Pull = GPIO_NOPULL;
- GPIO_InitStruct.Speed = GPIO_SPEED_HIGH;
- HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
- }
- /**
- * @brief This function is executed in case of error occurrence.
- * @param None
- * @retval None
- */
- void Error_Handler(void)
- {
- /* Turn LED2 on */
- BSP_LED_On(LED2);
- while (1)
- {
- }
- }
- #ifdef USE_FULL_ASSERT
- /**
- * @brief Reports the name of the source file and the source line number
- * where the assert_param error has occurred.
- * @param file: pointer to the source file name
- * @param line: assert_param error line source number
- * @retval None
- */
- void assert_failed(uint8_t *file, uint32_t line)
- {
- /* User can add his own implementation to report the file name and line number,
- ex: printf("Wrong parameters value: file %s on line %d", file, line) */
- /* Infinite loop */
- while (1)
- {
- }
- }
- #endif
- /**
- * @}
- */
- /**
- * @}
- */
- /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
復(fù)制代碼
|
-
-
Lcd菜單 HS0038.rar
2016-6-17 21:39 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
73.5 KB, 下載次數(shù): 10, 下載積分: 黑幣 -5
|