STM32F103個人學習基礎篇(1)
- 流水燈程式的寫法與詳解
- 按鍵程式的寫法與詳解
流水燈程式的寫法與詳解
要制作一個流水燈程式,首先應該配置野火闆上相對應的引腳PG12~15(因為每個闆子都不同還是得找到闆子所對應的原理圖在進行配置),将他們選為輸出類型,在選擇configuration項進行PG12~15的配置(例如輸出高低電平,模式,速度的配置和使用者标簽的寫入)

其次就是使用者代碼的寫入,制作流水燈隻需要用到兩個.c檔案,一個是main.c檔案,另一個就是stm32f1XX-hal-gpio.c檔案。
打開stm32f1XX-hal-gpio.c檔案找到翻轉函數(翻轉函數就是将參數中對應的GPIO引腳不斷的來回置1和置0)
/**
* @brief Toggles the specified GPIO pin
* @param GPIOx: where x can be (A..G depending on device used) to select the GPIO peripheral
* @param GPIO_Pin: Specifies the pins to be toggled.
* @retval None
*/
void HAL_GPIO_TogglePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
{
/* Check the parameters */
assert_param(IS_GPIO_PIN(GPIO_Pin));
GPIOx->ODR ^= GPIO_Pin;
}
接下來打開main.c檔案找到while循環(while(1)是一個死循環在裡面的函數會不斷的被調用和執行),因為要達到流水燈的效果是以還要添加一個HAL_Delay函數,而這個函數内的參數則是延遲的毫秒數(由個人定最好是幾百毫秒這樣效果比較明顯)
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
HAL_GPIO_TogglePin(GPIOG,LED1_Pin);
HAL_Delay();
HAL_GPIO_TogglePin(GPIOG,LED2_Pin);
HAL_Delay();
HAL_GPIO_TogglePin(GPIOG,LED3_Pin);
HAL_Delay();
HAL_GPIO_TogglePin(GPIOG,LED4_Pin);
HAL_Delay();
}
/* USER CODE END 3 */
}
程式寫完之後進行編譯然後下載下傳到闆子上檢視流水燈效果
按鍵程式的寫法與詳解
要制作一個按鍵程式,首先應該配置野火闆上相對應的引腳PF8~PF11,将他們設定為輸入類型,再選擇configuration項進行PF8~PF11的配置(其中在上拉和下拉電阻選擇是選擇上拉電阻),為了更直覺的看到按鍵的效果,我們這裡做的是按鍵按下熄滅led燈的程式
uint16_t key_dn=;(全局變量)
void HAL_SYSTICK_Callback(void)//滴答定時器的回調函數
{
static uint16_t key_o=x0f00;//PF8~,老按鍵狀态key_o=
uint16_t key_n=;//新按鍵狀态
static uint8_t b=;//靜态檢測按鍵變量
if(++b>=)
{
if(HAL_GPIO_ReadPin(GPIOF,k1_Pin))
key_n|=k1_Pin;
if(HAL_GPIO_ReadPin(GPIOF,k2_Pin))
key_n|=k2_Pin;
if(HAL_GPIO_ReadPin(GPIOF,k3_Pin))
key_n|=k3_Pin;
if(HAL_GPIO_ReadPin(GPIOF,k4_Pin))
key_n|=k4_Pin;
key_dn=(key_n^key_o)&key_o;//當按鍵按下key_o為x0000是key_dn按鍵被按下的那位就會被指派為
key_o=key_n;
b=;
}
}
再main.c中找到while(1)循環, 在其中寫上按鍵按下的判斷語句以及按鍵按下後led的變化控制函數
while ()
{
if(key_dn)
{
if(key_dn&k1_Pin)
{
HAL_GPIO_WritePin(GPIOG,led1_Pin,GPIO_PIN_SET);
}
if(key_dn&k2_Pin)
{
HAL_GPIO_WritePin(GPIOG,led2_Pin,GPIO_PIN_SET);
}
if(key_dn&k3_Pin)
{
HAL_GPIO_WritePin(GPIOG,led3_Pin,GPIO_PIN_SET);
}
if(key_dn&k4_Pin)
{
HAL_GPIO_WritePin(GPIOG,led4_Pin,GPIO_PIN_SET);
}
}
}
寫完函數之後編譯下載下傳看到的效果應該是,剛開始led燈是全亮狀态,當對應按鍵按下後led燈也會熄滅