STM32
直播中

张龙祥

8年用户 1215经验值
擅长:连接器
私信 关注
[问答]

STM32超级终端串口控制程序分享

STM32超级终端串口控制程序分享

回帖(1)

李颖

2021-12-8 14:23:30
  杨桃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("33[1;47;33mrn"); //设置颜色(参考超级终端使用)
                                printf(" 1y--开LED1灯      1n--关LED1灯 rn");
                                printf(" 2y--开LED2灯      2n--关LED2灯 rn");
                                printf(" 请输入控制指令,按回车键执行! 33[0mrn");
                        }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灯已经点亮!rn");
                        }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灯已经熄灭!rn");
                        }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灯已经点亮!rn");
                        }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灯已经熄灭!rn");
                        }else{ //如果以上都不是,即是错误的指令。
                                printf("指令错误!rn");
                        }
                        USART1_RX_STA=0; //将串口数据标志位清0
                }
        }
}



烧录验证



举报

更多回帖

发帖
×
20
完善资料,
赚取积分