网站首页 > 教程文章 正文
超级终端:HyperTerminal
采用串口1对超级终端内输入到的数据进行接受并发送。
串口1的中断程序如下:
void USART1_IRQHandler(void){ //串口1中断服务程序(固定的函数名不能修改)
u8 Res;
if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET){ //接收中断(接收到的数据必须是0x0d 0x0a结尾)
Res =USART_ReceiveData(USART1);//(USART1->DR); //读取接收到的数据
printf("%c",Res); //把收到的数据以 a符号变量 发送回电脑
if((USART1_RX_STA&0x8000)==0){//接收未完成 因为每次超级终端
if(USART1_RX_STA&0x4000){//接收到了0x0d
if(Res!=0x0a)USART1_RX_STA=0;//接收错误,重新开始 为什么是0x0A,在超级终端里面按下回车键实际上就是按下0x0D回车键和0x0A换行键两个键
else USART1_RX_STA|=0x8000; //接收完成了
}else{ //还没收到0X0D
if(Res==0x0d)USART1_RX_STA|=0x4000; //0x0d实际上就是回车按键
else{
USART1_RX_BUF[USART1_RX_STA&0X3FFF]=Res ; //将收到的数据放入数组
USART1_RX_STA++; //数据长度计数加1
if(USART1_RX_STA>(USART1_REC_LEN-1))USART1_RX_STA=0;//接收数据错误,重新开始接收
}
}
}
}
}
USART1_RX_STA其定义如下
//bit15,接收完成标志 15bit用来判断是否接受ascii到0x0A换行键
//bit14,接收到0x0d ox0d是回车的ascii
//bit13~0,接收到的有效字节数目
//u16 USART1_RX_STA=0; //接收状态标记
主函数如下:
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
}
}
}
相关理解:
1:从实际操作以及程序对比,超级终端内只要输入字符,那么就已经发送给了单片机,并非是输入一系列字符后按回车键才最终一次性发送
2:超级终端内按下键盘的回车键实际上是向单片机发送两个字符,一个是0x0d回车键,一个是0x0A换行键,其对应的是ascii这两个字符
3:注意里面的C语言使用时的相关技巧
- 上一篇: 毕业设计|语音识别智能家居制作
- 下一篇: 基于STM32的自动跟踪小车
猜你喜欢
- 2025-01-04 基于stm32的车辆减速灯项目——MPU6050或ADXL345
- 2025-01-04 基于STM32的自动跟踪小车
- 2025-01-04 485型风速和风向变送器数据包解析
- 2025-01-04 毕业设计|语音识别智能家居制作
- 2025-01-04 《STM32电子DIY》Lora模块SX1278通信
- 2025-01-04 FreeRTOS:Queue队列及队列API函数
- 2025-01-04 STM32调试蓝牙平衡小车及bug处理
- 2025-01-04 嵌入式软件开发常用的三种架构你知道吗?
- 2025-01-04 stm32使用MPU6050或ADXL345控制的车辆减速灯
- 2025-01-04 「正点原子STM32Mini板资料连载」第三十章 PS2 鼠标实验
- 最近发表
- 标签列表
-
- location.href (44)
- document.ready (36)
- git checkout -b (34)
- 跃点数 (35)
- 阿里云镜像地址 (33)
- qt qmessagebox (36)
- md5 sha1 (32)
- mybatis plus page (35)
- semaphore 使用详解 (32)
- update from 语句 (32)
- vue @scroll (38)
- 堆栈区别 (33)
- 在线子域名爆破 (32)
- 什么是容器 (33)
- sha1 md5 (33)
- navicat导出数据 (34)
- 阿里云acp考试 (33)
- 阿里云 nacos (34)
- redhat官网下载镜像 (36)
- srs服务器 (33)
- pico开发者 (33)
- https的端口号 (34)
- vscode更改主题 (35)
- 阿里云资源池 (34)
- os.path.join (33)