這段時間一直在忙,所以就晚上自己加加班搞搞這塊L476RG的板子,說出來都是淚,首先自己裝的STM32CubeMX老是閃退,自己準備用TIM進行捕捉解紅外碼,調試2個周末加3個晚上終于搞定了,ST推出的庫一開始用感覺真不方便,很多地方多不懂。自己就這樣硬著頭皮慢慢啃了,后來在論壇上發現版主netlhx的《NUCLEO教程》真是新手的指路燈,再次感謝netlhx版主的資料分享。
我這次做的是用紅外遙控可以使液晶顯示多個畫面,字庫自己做的,可以用紅外修改參數的數值并保存,有些比較重要的畫面還有要求輸入密碼,只有密碼正確才能進入,廢話不多說了,看圖吧。
添加一些代碼,我覺得注釋還是蠻多的,詳情見附件源碼。- //-------------------------------------
- //
- // 具體菜單選項定義,定義一個結構數組
- // 存儲在編碼區,節省內存RAM
- //
- //-------------------------------------
- struct Option sOption[OPTIONMETE] = {
- {0,4,13, "基本設置 ",4}, //0
- {0,18,13,"反饋設置 ",4}, //1
- {0,46,13,"高級設置 ",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,"關位確認 ",4}, //8
- {2,OPTIONMETE-1,0,"開位確認 ",4}, //9
- {2,OPTIONMETE-1,0,"調節死區 ",4}, //10
- {2,OPTIONMETE-1,0,"丟信動作 ",4}, //11
- {2,OPTIONMETE-1,0,"關過矩值 ",4}, //12
- {2,OPTIONMETE-1,0,"開過矩值 ",4}, //13
- {2,OPTIONMETE-1,0,"顯示方向 ",4}, //14
- {2,OPTIONMETE-1,0,"現場控制 ",4}, //15
- {2,OPTIONMETE-1,0,"更改基本密碼 ",6}, //16
- {2,OPTIONMETE-1,0,"恢復出廠值 ",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,"低端微調 ",4}, //22
- {4,OPTIONMETE-1,1,"高端微調 ",4}, //23
- {4,27,1,"觸點輸出 ",4}, //24
- {4,27,1,"擴展觸點 ",4}, //25
- {4,OPTIONMETE-1,1,"更改反饋密碼 ",6}, //26
- {5,OPTIONMETE-1,24,"關到位 ",3}, //27
- {5,OPTIONMETE-1,24,"開到位 ",3}, //28
- {5,OPTIONMETE-1,24,"關過矩 ",3}, //29
- {5,OPTIONMETE-1,24,"開過矩 ",3}, //30
- {5,OPTIONMETE-1,24,"過 矩 ",3}, //31
- {5,OPTIONMETE-1,24,"正在關 ",3}, //32
- {5,OPTIONMETE-1,24,"正在開 ",3}, //33
- {5,OPTIONMETE-1,24,"正在運行 ",4}, //34
- {5,39,24,"中間位置 ",4}, //35
- {5,OPTIONMETE-1,24,"遠方位置 ",4}, //36
- {5,OPTIONMETE-1,24,"現場位置 ",4}, //37
- {6,OPTIONMETE-1,35," 運行到達位置 ",0}, //38
- {6,OPTIONMETE-1,35," ",0}, //39
- {6,OPTIONMETE-1,35," ",0}, //40
- {6,OPTIONMETE-1,35," ",0}, //41
- {7,OPTIONMETE-1,24," 故障報警 ",0}, //42
- {7,OPTIONMETE-1,24,"過矩報警 ",4}, //43
- {7,OPTIONMETE-1,24,"遠方報警 ",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 設置 ",4}, //50
- {9,OPTIONMETE-1,2,"關閉方式 ",4}, //51
- {9,OPTIONMETE-1,2,"關閉方向 ",4}, //52
- {9,OPTIONMETE-1,2,"正反作用 ",4}, //53
- {9,OPTIONMETE-1,2,"轉矩顯示 ",4}, //54
- {9,OPTIONMETE-1,2,"反饋低端 ",4}, //55
- {9,OPTIONMETE-1,2,"兩線控制 ",4}, //56
- {9,OPTIONMETE-1,2,"標定低信 ",4}, //57
- {9,OPTIONMETE-1,2,"標定高信 ",4}, //58
- {9,OPTIONMETE-1,2,"剎車制動 ",4}, //59
- {9,OPTIONMETE-1,2,"停動時間 ",4}, //60
- {9,OPTIONMETE-1,2,"間斷運行 ",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,"保存出廠設置 ",6}, //70
- {11,OPTIONMETE-1,65,"電源選項 ",4}, //71
- {11,OPTIONMETE-1,65,"遠方保持 ",4}, //72
- {12,OPTIONMETE-1,3,"方式鈕位置 ",5}, //73
- {12,OPTIONMETE-1,3,"操作鈕位置 ",5}, //74
- {12,OPTIONMETE-1,3,"遠方打開信號 ",6}, //75
- {12,OPTIONMETE-1,3,"遠方關閉信號 ",6}, //76
- {12,OPTIONMETE-1,3,"遠方保持信號 ",6}, //77
- {12,OPTIONMETE-1,3,"遠方自動信號 ",6}, //78
- {12,OPTIONMETE-1,3,"遠方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,"開向停時 ",4}, //84
- {13,OPTIONMETE-1,61,"關向始位 ",4}, //85
- {13,OPTIONMETE-1,61,"關向終位 ",4}, //86
- {13,OPTIONMETE-1,61,"關向動程 ",4}, //87
- {13,OPTIONMETE-1,61,"關向停時 ",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," 兩線設置 ",0}, //95
- {15,OPTIONMETE-1,56,"有信開,無信關 ",7}, //96
- {15,OPTIONMETE-1,56,"有信關,無信開 ",7}, //97
- {MENULEVEL-1,OPTIONMETE-1,0,"",0} //98
- };
- //----------------------------------------
- //
- // 菜單上移一項函數
- // 函數原形:void MenuUpOneOption (void);
- // 沒有參數,沒有返回值
- // 調用方式:void MenuUpOneOption (void);
- //
- //----------------------------------------
- void MenuUpOneOption (void)
- {
- if(MenuLevelStart()) //如果當前為表單第一項
- {
- if(Level[sOption[SelectIndex].KeyLevel][2]>=4) //并且表單中選項數目大于等于4個
- {
- FirstLineDisIndex = Level[sOption[SelectIndex].KeyLevel][1]-3; //第一行顯示索引號為倒數第四項
- SelectIndex = Level[sOption[SelectIndex].KeyLevel][1]; //選擇索引為表單最后一項
- SelectLine = 4; //標記選擇行為第四行
- DIS12864M(); //刷新屏幕顯示
- }
- else //如果選項數目并不大于四個
- {
- SelectIndex = Level[sOption[SelectIndex].KeyLevel][1]; //選擇索引為當前表單最后一個
- SelectLine = Level[sOption[SelectIndex].KeyLevel][2]; //顯示行表單數目(最后一個)
- DIS12864M(); //刷新屏幕顯示
- }
- }
- else //如果當前不是開始索引
- {
- if(SelectLine==1) //并且已經在屏幕最上邊一行
- {
- FirstLineDisIndex--; //顯示索引上移
- SelectIndex--; //選擇索引自減
- SelectLine = 1; //選擇行還是第一行
- DIS12864M (); //刷新屏幕
- }
- else //如果不是第一行
- {
- SelectLine--; //選擇行自減
- SelectIndex--; //選擇索引自減
- DIS12864M (); //刷新屏幕顯示
- }
- }
- }
- //----------------------------------------
- //
- // 菜單下移一項函數
- // 函數原形:void MenuDownOneOption (void);
- // 沒有參數,沒有返回值
- // 調用方式:void MenuDownOneOption (void);
- //
- //----------------------------------------
- void MenuDownOneOption (void)
- {
- if(MenuLevelEnd()) //如果當前是表單最后一個索引
- {
- FirstLineDisIndex = Level[sOption[SelectIndex].KeyLevel][0]; //第一行顯示索引為表單第一個選項
- SelectIndex = Level[sOption[SelectIndex].KeyLevel][0]; //選擇索引為表單第一個選項索引
- SelectLine = 1; //選擇行為第一行
- DIS12864M (); //刷新顯示
- }
- else //如果不是最后的索引
- {
- if(SelectLine!=4) //如果當前不是屏幕最底行
- {
- SelectIndex++; //選擇索引自加
- SelectLine++; //選擇行下移
- // SetALineReverse (SelectLine); //刷新選擇行
- DIS12864M (); //刷新顯示
- }
- else //如果是屏幕最低行
- {
- FirstLineDisIndex++; //第一行顯示下移
- SelectIndex++; //選擇索引自加
- DIS12864M(); //刷新顯示
- }
- }
- }
- //----------------------------------------
- //
- // 菜單退出功能函數
- // 函數原形:void MenuCancelOption (void);
- // 沒有參數,沒有返回值
- // 調用方式: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; //選擇索引為選項返回索引
- }
- else //如果是從功能返回
- SelectIndex = LastIndex;//索引等于進入前保存索引
- if(Level[sOption[SelectIndex].KeyLevel][2]>=4) //如果返回表單選項數目大于4個
- {
- if(SelectIndex > Level[sOption[SelectIndex].KeyLevel][1]-3) //根據返回選項確定顯示首項
- {
- FirstLineDisIndex = Level[sOption[SelectIndex].KeyLevel][1]-3;
- SelectLine = 4-(Level[sOption[SelectIndex].KeyLevel][1]-SelectIndex);
- DIS12864M (); //刷新顯示
- }
- else //一般顯示方式
- {
- FirstLineDisIndex = SelectIndex; //第一行顯示索引
- SelectLine = 1; //選擇第一行
- DIS12864M (); //刷新菜單
- }
- }
- else //如果返回表單選項數目不足4個
- {
- FirstLineDisIndex = Level[sOption[SelectIndex].KeyLevel][0]; //第一行顯示索引為表單第一項
- SelectLine = SelectIndex - Level[sOption[SelectIndex].KeyLevel][0]+1; //選擇行標志為當前選擇索引對應行
- DIS12864M (); //刷新菜單
- }
- }
復制代碼 因為之前的文件比較大,我就上傳了源代碼(未添加L4的庫),現在我已經將整個開發工程上傳到百度云(可直接編譯)。
鏈接:游客,本帖隱藏的內容需要積分高于 1 才可瀏覽,您當前積分為 0
105150vu55omuibqmb8utc.jpg (1.55 MB, 下載次數: 105)
下載附件
2016-6-17 22:13 上傳
105201te3g1ukjzm7x8zke.jpg (1.45 MB, 下載次數: 95)
下載附件
2016-6-17 22:13 上傳
105213mbzi9bk2tkikm252.jpg (1.41 MB, 下載次數: 110)
下載附件
2016-6-17 22:13 上傳
105225dk7l6k88xxzglg1l.jpg (1.69 MB, 下載次數: 93)
下載附件
2016-6-17 22:13 上傳
105238w1584xl84b4m8tm0.jpg (1.72 MB, 下載次數: 109)
下載附件
2016-6-17 22:13 上傳
105248brn9rpnzqqeievti.jpg (1.4 MB, 下載次數: 124)
下載附件
2016-6-17 22:13 上傳
105917lguwrir3cpfue4xu.jpg (1.63 MB, 下載次數: 89)
下載附件
2016-6-17 22:13 上傳
105928eqyje1gjq66se5qj.jpg (1.6 MB, 下載次數: 122)
下載附件
2016-6-17 22:13 上傳
105939u71bt7cb1etfftqv.jpg (1.34 MB, 下載次數: 98)
下載附件
2016-6-17 22:13 上傳
105952x1k4nk1b4buqqh22.jpg (1.75 MB, 下載次數: 95)
下載附件
2016-6-17 22:13 上傳
110004f2d2x72esk3xwdkx.jpg (1.71 MB, 下載次數: 84)
下載附件
2016-6-17 22:13 上傳
110017batdx32a9axtzkzq.jpg (1.68 MB, 下載次數: 110)
下載附件
2016-6-17 22:13 上傳
110245huh9wwosn55sppow.jpg (1.6 MB, 下載次數: 105)
下載附件
2016-6-17 22:13 上傳
110257x0ysy1yc5eq065wy.jpg (1.64 MB, 下載次數: 106)
下載附件
2016-6-17 22:13 上傳
110308r26njvvt7jjznltu.jpg (1.35 MB, 下載次數: 104)
下載附件
2016-6-17 22:13 上傳
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();
-
- /* 延時函數初始化 */
- 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 ) //寄一個數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****/
復制代碼
|