零基礎STM32開發第一篇點亮led燈
- 前言
- 展示
- 電路原理圖設計
- 電源部分
- MCU部分
- 按鍵LED部分
- 蜂鳴器繼電器外設
- 排針
- PCB設計
- 物體圖
- 所需軟體
- 點亮led燈測驗開始
- 效果演示
- 點燈學會了可以干什么
前言
本人自制了一款stm32核心板,正好要做測驗各個功能是否正常使用,借此機會出個教程,供小白從零開始學習,后面會在芯片里面移植freertos系統內核以及鴻蒙系統內核等做測驗,單片機入門必點燈 !!!
展示
電路原理圖設計
用了模塊分立思想做的原理圖,高內聚低耦合
電源部分

MCU部分

按鍵LED部分

蜂鳴器繼電器外設

排針

PCB設計

比較簡單的兩層板,我還自制了一個6層板樹莓派,后期可能會出做板子的教程,
物體圖

所需軟體
1.KEIL5 ARM版,別下成51的,官網下就行
2.CUBEMAX:STM32初始化代碼生成工具,對小白比較友善,也可以下里面用暫存器,比較方便
點亮led燈測驗開始


寫的是暫存器版本+庫函式版本
查看資料手冊得知暫存器
BSRR高16位低電平
低16位高電平

配置時鐘源選擇外部時鐘

配置時鐘樹,配置成最大值最佳配置
打開STLINK除錯,防止下載程式完程式死鎖,后面會說怎么解決死鎖

while (1)
{
GPIOB->BSRR=(1<<12)|(1<<13)|(1<<14)|(1<<15);//置位輸出高電平,燈熄滅
GPIOF->BSRR=(1<<28);//復位燈1點亮
HAL_Delay(1000);
GPIOF->BSRR=(1<<12)|(1<<13)|(1<<14)|(1<<15);//置位輸出高電平,燈熄滅
HAL_Delay(1000);
GPIOF->BSRR=(1<<29);//復位燈2點亮
HAL_Delay(1000);
GPIOF->BSRR=(1<<12)|(1<<13)|(1<<14)|(1<<15);//置位輸出高電平,燈熄滅
HAL_Delay(1000);
GPIOF->BSRR=(1<<30);//復位燈3點亮
HAL_Delay(1000);
GPIOF->BSRR=(1<<12)|(1<<13)|(1<<14)|(1<<15);//置位輸出高電平,燈熄滅
HAL_Delay(1000);
GPIOF->BSRR=(1<<31);//復位燈4點亮
HAL_Delay(1000);
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
}
HAL庫函式版本

int main(void)
{
/* USER CODE BEGIN 1 */
/* USER CODE END 1 */
/* MCU Configuration--------------------------------------------------------*/
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init();
/* USER CODE BEGIN Init */
/* USER CODE END Init */
/* Configure the system clock */
SystemClock_Config();
/* USER CODE BEGIN SysInit */
/* USER CODE END SysInit */
/* Initialize all configured peripherals */
MX_GPIO_Init();
MX_USART2_UART_Init();
/* USER CODE BEGIN 2 */
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_12|GPIO_PIN_13|GPIO_PIN_14|GPIO_PIN_15,GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_15,GPIO_PIN_RESET);
//printf("light on\n");
HAL_Delay(200);
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_14,GPIO_PIN_RESET);
HAL_Delay(200);
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_13,GPIO_PIN_RESET);
HAL_Delay(200);
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_12,GPIO_PIN_RESET);
HAL_Delay(200);
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_15,GPIO_PIN_RESET);
//printf("light on\n");
HAL_Delay(200);
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_15,GPIO_PIN_SET);
HAL_Delay(200);
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_14,GPIO_PIN_RESET);
HAL_Delay(200);
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_14,GPIO_PIN_SET);
HAL_Delay(200);
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_13,GPIO_PIN_RESET);
HAL_Delay(200);
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_13,GPIO_PIN_SET);
HAL_Delay(200);
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_12,GPIO_PIN_RESET);
HAL_Delay(200);
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_12,GPIO_PIN_SET);
HAL_Delay(200);
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
}
/* USER CODE END 3 */
}
注意:不打開除錯功能里面會出現個下載一次程式就禁止下載的函式,需要boot0復位清除flash我打開除錯功能了,所以沒出現鎖死函式,可以做一下對比,注釋掉鎖死函式就可,在下面檔案里,

效果演示

點燈學會了可以干什么
控制繼電器,蜂鳴器,電閘,水泵,電機,開關,燈泡,洗衣機,電風扇,,,非常多,設備控制的基礎
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/332163.html
標籤:其他
