要寫的文件
led_app
lcd_app
key_app
adc_app
usart_app
scheduler
LHF_SYS
一、外設引腳配置
1. 按鍵引腳
按鍵引腳配置如下:
- B1:PB0
- B2:PB1
- B3:PB2
- B4:PA0
2. LCD引腳
LCD引腳配置如下:
- GPIO_Pin_9 /* PB.9 */
- GPIO_Pin_8 /* PB.8 */
- GPIO_Pin_5 /* PB.5 */
- GPIO_Pin_10 /* PB.10 */
3. LED引腳
LED引腳配置如下:
- PC8-PC15
4. USART引腳
USART引腳配置如下:
- A9(USART1_TX)
- A10(USART1_RX)
- 今天一直因為串口的事情弄不起耗費兩個小時,結果不是代碼的問題,是板子有問題,啊,我真的服了,還把我的代碼改成了一坨
- https://blog.csdn.net/m0_46175974/article/details/134515555?ops_request_misc=%257B%2522request%255Fid%2522%253A%25229b5dc5d8695d41de72dc965cac7280d8%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=9b5dc5d8695d41de72dc965cac7280d8&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2allfirst_rank_ecpm_v1~rank_v31_ecpm-1-134515555-null-null.142v102pc_search_result_base3&utm_term=%E4%B8%B2%E5%8F%A3%E5%8F%AA%E6%8E%A5%E5%8F%971%E6%AC%A1%E7%9A%84%E5%8E%9F%E5%9B%A0&spm=1018.2226.3001.4187
這個博主提到的一個問題,是我把自己弄暈過去遇到的,希望對你有幫助
5. 板上電阻
板上電阻R37和R38連接到:
- PB15
- PB12
二、關鍵函數
1. LCD顯示函數
void LcdSprintf(uint8_t Line, char *format, ...)
{char String[21];va_list arg;va_start(arg, format);vsprintf(String, format, arg);va_end(arg);LCD_DisplayStringLine(Line, String);
}
使用說明:
Line
:指定LCD顯示的行號。format
:格式化字符串,類似于printf
的用法。- 該函數通過
va_list
和vsprintf
實現可變參數的格式化顯示。
2. 按鍵狀態檢測
key_val = key_read();
key_down = key_val & (key_old ^ key_val);
key_up = ~key_val & (key_old ^ key_val);
key_old = key_val;
使用說明:
key_read()
:讀取當前按鍵狀態。key_down
:檢測按鍵按下事件。key_up
:檢測按鍵釋放事件。key_old
:保存上一次按鍵狀態,用于對比。
3. ADC電壓采集
uint32_t GetAdcVoltage(HAL_ADC_HandleTypeDef *hadc)
{HAL_ADC_Start(hadc);uint32_t adc = HAL_ADC_GetValue(hadc);return adc * 3.3 / 4096;
}
使用說明:
HAL_ADC_Start(hadc)
:啟動ADC轉換。HAL_ADC_GetValue(hadc)
:獲取ADC轉換后的值。- 由于ADC精度為12位,參考電壓為3.3V,因此通過公式
adc * 3.3 / 4096
計算實際電壓值。
4. 串口通信
(1)中斷方式
如果忘記使用DMA,可以直接使用中斷方式:
- 配置引腳A9(USART1_TX)和A10(USART1_RX)。
(2)DMA方式
使用DMA接收串口數據:
HAL_UARTEx_ReceiveToIdle_DMA(&huart1, uart_rx_dma_buffer, sizeof(uart_rx_dma_buffer));
__HAL_DMA_DISABLE_IT(&hdma_usart1_rx, DMA_IT_HT);
使用說明:
HAL_UARTEx_ReceiveToIdle_DMA
:配置DMA接收串口數據,直到接收到空閑信號。__HAL_DMA_DISABLE_IT
:禁用DMA的半傳輸中斷。
(3)標準輸入輸出重定向
為了在STM32上使用標準輸入輸出函數(如printf
和scanf
),需要重定向fputc
和fgetc
函數:
int fputc(int ch, FILE* str)
{HAL_UART_Transmit(&huart1, (uint8_t *) &ch, 1, 10);return ch;
}int fgetc(FILE *fp)
{uint8_t ch = 0;HAL_UART_Receive(&huart1, &ch, 1, 0xffff);return ch;
}
使用說明:
fputc
:將字符通過串口發送。fgetc
:從串口接收字符。