實驗内容:按鍵KEY1控制RGB燈顔色變換。
一、原理圖
二、 CubeMX配置
Step1. 打開 STM32CubeMX ,點選“ New Project ”,選擇晶片型号, STM32F103VETx 。
Step2.選擇時鐘源,并配置時鐘樹。選擇Crystal/Ceramic Resonator,并配置系統時鐘為72M。
Step3.配置SYS,我們這裡選擇的是Serial Wire。(正常情況配置不配置不影響,debug可以使用。但是你不可以把這兩個引腳用于其他複用功能,如果用于其他複用功能,debug就不起作用了。)
Step4.GPIO引腳配置,點選搜尋框,選擇相應的引腳。PB0/PB1/PB5 配置為GPIO_Output,PA0 配置為GPIO_Input。
KEY引腳配置:方框3 第一行是GPIO模式,這裡選擇輸入模式,第二行是選擇上拉還是下拉,這裡選擇既不上拉也不下拉,第三行是使用者标簽(可以自己給該引腳命名)。
RGB燈引腳配置:方框中 第一行是初始化引腳電平,(我的開發闆燈是低電平亮,是以初始化高電平),第二行是GPIO模式,這裡選擇推挽輸出,第三行是選擇上拉還是下拉,這裡選擇既不上拉也不下拉,第四行是IO口翻轉速度,這裡選擇低速,第五行是使用者标簽(可以自己給該引腳命名)。
Step5.Project工程設定,這個選項是配置工程重要的一個選項,其中配置的資訊也比較重要,且容易了解。
Step6.Project代碼生成配置界面。
Step7.Project進階配置界面。(一般情況下,采用預設配置即可)
Step8.點選“GENRATE CODE”生成代碼。
三、添加功能代碼
按鍵掃描程式:
uint8_t KEY_SCAN(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin)
{
if(HAL_GPIO_ReadPin(GPIOx,GPIO_Pin)==1)
{
while(HAL_GPIO_ReadPin(GPIOx,GPIO_Pin)==1);//松手檢測
return 1;
}
return 0;
}
RGB燈控制程式:
uint8_t cnt=0;
uint8_t value=0;
while (1)
{
value=KEY_SCAN(KEY_CTRL_GPIO_Port, KEY_CTRL_Pin);
if(value==1)
{
switch(cnt)
{
case 0:
{
HAL_GPIO_WritePin(GPIOB, LED_R_Pin,0);
HAL_GPIO_WritePin(GPIOB, LED_G_Pin,1);
HAL_GPIO_WritePin(GPIOB, LED_B_Pin,1);
cnt++;
break;
}
case 1:
{
HAL_GPIO_WritePin(GPIOB, LED_R_Pin,1);
HAL_GPIO_WritePin(GPIOB, LED_G_Pin,0);
HAL_GPIO_WritePin(GPIOB, LED_B_Pin,1);
cnt++;
break;
}
case 2:
{
HAL_GPIO_WritePin(GPIOB, LED_R_Pin,1);
HAL_GPIO_WritePin(GPIOB, LED_G_Pin,1);
HAL_GPIO_WritePin(GPIOB, LED_B_Pin,0);
cnt++;
break;
}
case 3:
{
HAL_GPIO_WritePin(GPIOB, LED_R_Pin,1);
HAL_GPIO_WritePin(GPIOB, LED_G_Pin,1);
HAL_GPIO_WritePin(GPIOB, LED_B_Pin,1);
cnt=0;
break;
}
}
}
}