|
一、代碼實(shí)現(xiàn)流程
打開CubeMx→新建工程→搜索芯片→在右邊點(diǎn)擊芯片→保存工程→點(diǎn)擊RCC配置時(shí)鐘→設(shè)置成Crystal→然后在Clock Configuration中設(shè)置為HSE、72→然后點(diǎn)擊SYS→在Debug那里選擇Senal Wire→然后配置IO口(輸入輸出還有名字)→然后再GPIO中查看自己所設(shè)置的東西→然后在對(duì)應(yīng)位置敲代碼
二、代碼實(shí)現(xiàn)過程總結(jié)
①用到按鍵一班都會(huì)涉及消抖還有狀態(tài)標(biāo)志位,使用輪詢計(jì)數(shù)可以更好地利用內(nèi)部資源
②ctrl+k進(jìn)行所選代碼整體注釋,Ctrl+shift+k進(jìn)行整體取消注釋
③一定要在系統(tǒng)規(guī)定我們寫代碼的地方寫,不然下次生成還得再寫一遍
④對(duì)于什么時(shí)候設(shè)置成輸入輸出,我的理解就是你要用某個(gè)引腳控制一個(gè)東西,比如說你想控制小燈,那這個(gè)引腳就得設(shè)置成輸出。如果想知道某個(gè)引腳是高電平還是低電平,就設(shè)置成輸入,比如我想知道按鍵所連的IO口的狀態(tài)。
⑤對(duì)于上拉還是下拉,這是針對(duì)于輸入而言,輸出沒有上下拉的概念,按鍵按下檢測(cè)到低電平就是上拉輸入,按鍵按下檢測(cè)到高電平就是下拉輸入。
⑥讀取或者寫入GPIO函數(shù)在GPIO庫中,而按鍵名稱定義在main.h里面
三、代碼
while (1)
{
switch(step)
{
case 0:
{
if(HAL_GPIO_ReadPin(KEY_GPIO_Port,KEY_Pin)==GPIO_PIN_RESET )//判斷按鍵是否按下
{
count++;
if(count>=10000)//真的按下了
{
count = 0;//按鍵按下也要重新開始
//printf("按鍵按下了\n");
step = 1;//標(biāo)志
flag = !flag;//按鍵標(biāo)志狀態(tài)
}
}
else//抖動(dòng)狀態(tài)
{
count = 0;
}
}
break;
case 1:
{
if(HAL_GPIO_ReadPin(KEY_GPIO_Port,KEY_Pin)==GPIO_PIN_SET)//判斷按鍵是否釋放
{
//printf("按鍵已經(jīng)釋放\n");
step = 0;
}
}
break;
}
if(flag==0)
{
HAL_GPIO_WritePin(LED1_GPIO_Port, LED1_Pin, GPIO_PIN_RESET);//燈亮
HAL_GPIO_WritePin(LED0_GPIO_Port, LED0_Pin, GPIO_PIN_RESET);//燈亮
}
else
{
HAL_GPIO_WritePin(LED1_GPIO_Port, LED1_Pin, GPIO_PIN_SET);//燈滅
HAL_GPIO_WritePin(LED0_GPIO_Port, LED0_Pin, GPIO_PIN_SET);//燈滅
}
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
}
|
|