///2019 6 12 更新 加入 :串口助手截图 简易问题说明
///2019 6 11 更新 加入 : 使用的串口调试助手是 XCOM2.0
///关于直接下载代码后发送相关指令 开发板无响应的问题简易说明:(1)查看原理图,看LED和BEEP的IO口是否与本源程序对应,如果不对应,请修改相关C或H文件;(2)查看波特率,停止位,奇偶校验位等设置是否正确
///说明, 本人小白一枚,最近学习用正点原子战舰V3学习32 ,恰好学习到串口这一段,想寻找相关以指令控制元件的代码,可惜良莠不齐,以下源码是偶基于网上一些前辈版本修改而来,已经完全实现用汉字指令控制LED 与BEEP,最近正在啃短信控制LED.目前源码、原理图已经全部上传。若有问题 敬请指正
LED灯原理图
蜂鸣器原理图黄色的是单片机
发送指令“打开LED1”后 DS1点亮
发送指令“打开LED1”时串口助手截图
//芯片:stm32F103ze 软件:KEIL5 XCOM2.0
硬件:串口1中 RXD与PA9 TXD与PA10相连接 其余不用变动
#include "sys.h"
#include "delay.h"
#include "led.h"
#include "usart.h"
#include "string.h"
#include "beep.h"
char c[200]; //定义一个长度为200的字符串为c
int main(void)
{
u8 z;
u8 t=0;
u8 L;
u8 m=0;
u8 h=0;
delay_init();
LED_Init();
BEEP_Init();
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
uart_init(115200);
while(1)
{
if(USART_RX_STA&0x8000)
{
L=USART_RX_STA&0x3FFF;
printf("\r\n执行的命令为:\r\n\r\n\r\n");
for(z=0;z<L;z++)
{
c[z]=USART_RX_BUF[z];
USART_SendData(USART1, USART_RX_BUF[z]);//可显示向串口1发送的指令
while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);//等待发送结束
}
USART_RX_STA=0;
USART_ClearFlag(USART1, USART_FLAG_RXNE);
if(!(strcmp(c,"打开LED1")))
{
LED1=0;
memset(c,0,200);//将0填充进c指向的200字节内存,也就是清零
//执行不了的情况
}
if(!(strcmp(c,"打开LED0")))
{
LED0=0;
memset(c,0,200);
}
if(!(strcmp(c,"打开蜂鸣器")))
{
BEEP=1;
memset(c,0,200);
}
if(!(strcmp(c,"关闭LED1")))
{
LED1=1;
memset(c,0,200);
}
if(!(strcmp(c,"关闭LED0")))
{
LED0=1;
memset(c,0,200);
}
if(!(strcmp(c,"关闭蜂鸣器")))
{
BEEP=0;
memset(c,0,200);
}
if(!(strcmp(c,"打开所有LED")))
{
LED0=0;
LED1=0;
memset(c,0,200);
}
if(!(strcmp(c,"关闭所有LED")))
{
LED0=1;
LED1=1;
memset(c,0,200);
}
}
else
{
printf(" \r\n %d时%d分%d秒 \r\n",h,m,t);
delay_ms(1000);
t++;
if(t%60==0)
{
m=t/60+m;
if(m%60==0)
{
h=m/60+h;
printf(" \r\n %d时%d分%d秒 \r\n",m,t,h);
m=0;
}
else printf(" \r\n %d时%d分%d秒 \r\n",h,t,m);
t=0;
}
}
}
}
全部资料51hei下载地址:
usart.7z
(185.89 KB, 下载次数: 262)
|