文章目錄
- 示例程式燒錄驗證
- 基于上一節程式修改
- 燒錄驗證
楊桃32學習筆記,本文圖片文字皆為轉述
示例程式燒錄驗證

使用之前文章講過的燒錄軟體燒錄結束后,打開超級終端,按下回車彈出指令界面如
下,按照提示可以輸入命令進行控制led狀態,

基于上一節程式修改
全域變數
函式體內部的變數的作用域僅在該函式內,如果想要在別的檔案和函式內呼叫該變數
就需要定義全域變數,具體方法如下


我們在超級終端輸入的命令保存在,接識訓沖陣列中,當我們按下回車的時候,程式
就會在陣列中查找我們輸入的內容
使能串口1中斷
因為在串口處理函式當中,對串口接受的內容進行處理,
解讀usart.c中實作超級終端控制的函式


修改主函式
#include "stm32f10x.h" //STM32頭檔案
#include "sys.h"
#include "delay.h"
#include "led.h"
#include "key.h"
#include "buzzer.h"
#include "usart.h"
int main (void){//主程式
RCC_Configuration();
LED_Init();//LED初始化
KEY_Init();//按鍵初始化
BUZZER_Init();//蜂鳴器初始化
USART1_Init(115200); //串口初始化,引數中寫波特率
USART1_RX_STA=0xC000; //初始值設為有回車的狀態,即顯示一次歡迎詞
while(1){
if(USART1_RX_STA&0xC000){ //如果標志位是0xC000表示收到資料串完成,可以處理,
if((USART1_RX_STA&0x3FFF)==0){ //單獨的回車鍵再顯示一次歡迎詞
printf("\033[1;47;33m\r\n"); //設定顏色(參考超級終端使用)
printf(" 1y--開LED1燈 1n--關LED1燈 \r\n");
printf(" 2y--開LED2燈 2n--關LED2燈 \r\n");
printf(" 請輸入控制指令,按回車鍵執行! \033[0m\r\n");
}else if((USART1_RX_STA&0x3FFF)==2 && USART1_RX_BUF[0]=='1' && USART1_RX_BUF[1]=='y'){ //判斷資料是不是2個,第一個資料是不是“1”,第二個是不是“y”
GPIO_SetBits(LEDPORT,LED1); //LED燈都為高電平(1)
printf("1y -- LED1燈已經點亮!\r\n");
}else if((USART1_RX_STA&0x3FFF)==2 && USART1_RX_BUF[0]=='1' && USART1_RX_BUF[1]=='n'){
GPIO_ResetBits(LEDPORT,LED1); LED燈都為低電平(0)
printf("1n -- LED1燈已經熄滅!\r\n");
}else if((USART1_RX_STA&0x3FFF)==2 && USART1_RX_BUF[0]=='2' && USART1_RX_BUF[1]=='y'){
GPIO_SetBits(LEDPORT,LED2); //LED燈都為高電平(1)
printf("2y -- LED2燈已經點亮!\r\n");
}else if((USART1_RX_STA&0x3FFF)==2 && USART1_RX_BUF[0]=='2' && USART1_RX_BUF[1]=='n'){
GPIO_ResetBits(LEDPORT,LED2); LED燈都為低電平(0)
printf("2n -- LED2燈已經熄滅!\r\n");
}else{ //如果以上都不是,即是錯誤的指令,
printf("指令錯誤!\r\n");
}
USART1_RX_STA=0; //將串口資料標志位清0
}
}
}

燒錄驗證

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/278932.html
標籤:其他
