找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 8077|回复: 18
收起左侧

基于stm32发送串口指令控制LED,蜂鸣器等(串口助手+原理图+显示结果)

  [复制链接]
ID:536427 发表于 2019-6-3 08:35 | 显示全部楼层 |阅读模式
本帖最后由 我累个去啊啊啊 于 2019-6-12 16:22 编辑

///2019 6 12 更新 加入 :串口助手截图 简易问题说明
///2019 6 11 更新  加入 :  使用的串口调试助手是  XCOM2.0
///关于直接下载代码后发送相关指令 开发板无响应的问题简易说明:(1)查看原理图,看LED和BEEP的IO口是否与本源程序对应,如果不对应,请修改相关C或H文件;(2)查看波特率,停止位,奇偶校验位等设置是否正确
///说明, 本人小白一枚,最近学习用正点原子战舰V3学习32 ,恰好学习到串口这一段,想寻找相关以指令控制元件的代码,可惜良莠不齐,以下源码是偶基于网上一些前辈版本修改而来,已经完全实现用汉字指令控制LED 与BEEP,最近正在啃短信控制LED.目前源码、原理图已经全部上传。若有问题 敬请指正

LED灯原理图

LED灯原理图

蜂鸣器原理图黄色的是单片机

蜂鸣器原理图黄色的是单片机



发送指令“打开LED1”后 DS1点亮

发送指令“打开LED1”后 DS1点亮

发送指令“打开LED1”时串口助手截图

发送指令“打开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, 下载次数: 261)

评分

参与人数 1黑币 +50 收起 理由
admin + 50

查看全部评分

回复

使用道具 举报

ID:558088 发表于 2019-6-10 17:59 | 显示全部楼层
请问一下能控制什么吗
回复

使用道具 举报

ID:558088 发表于 2019-6-10 18:00 | 显示全部楼层
你好 你发的那个程序 是控制什么的能跟我说一下嘛 我下载了还在研究 刚刚学不懂
回复

使用道具 举报

ID:558088 发表于 2019-6-10 18:36 | 显示全部楼层
楼主在吗 学习下
回复

使用道具 举报

ID:536427 发表于 2019-6-11 08:44 | 显示全部楼层
dididi1313 发表于 2019-6-10 18:00
你好 你发的那个程序 是控制什么的能跟我说一下嘛 我下载了还在研究 刚刚学不懂

控制led 蜂鸣器 当没有指令时 就是一个时钟,持续向串口发送时分秒
回复

使用道具 举报

ID:558088 发表于 2019-6-11 10:21 | 显示全部楼层
我累个去啊啊啊 发表于 2019-6-11 08:44
控制led 蜂鸣器 当没有指令时 就是一个时钟,持续向串口发送时分秒

我想问一下哪个是串口的程序 有什么用 我还没学过这个
回复

使用道具 举报

ID:536427 发表于 2019-6-11 17:04 | 显示全部楼层
dididi1313 发表于 2019-6-11 10:21
我想问一下哪个是串口的程序 有什么用 我还没学过这个

USART.c    USART.h 就是串口程序
回复

使用道具 举报

ID:558088 发表于 2019-6-11 17:12 | 显示全部楼层
串口那个助手输入 然后不能输出啊
回复

使用道具 举报

ID:558088 发表于 2019-6-11 20:02 | 显示全部楼层
我研究了一下午 然后现在能运行了 但是按钮怎么改也调不了时间 蜂鸣器 灯也不亮
回复

使用道具 举报

ID:536427 发表于 2019-6-12 16:09 | 显示全部楼层
dididi1313 发表于 2019-6-11 20:02
我研究了一下午 然后现在能运行了 但是按钮怎么改也调不了时间 蜂鸣器 灯也不亮

已私信
回复

使用道具 举报

ID:535196 发表于 2019-6-12 22:38 | 显示全部楼层
小白想问一下STM32用什么编程软件比较好,KEIL4好像不可以用32
回复

使用道具 举报

ID:417845 发表于 2019-6-13 09:45 | 显示全部楼层
楼主,我的开发板是STM32f407的,下载后编译没有问题,但串口输入没显示
回复

使用道具 举报

ID:536427 发表于 2019-6-16 20:05 | 显示全部楼层
孤夜之舞 发表于 2019-6-12 22:38
小白想问一下STM32用什么编程软件比较好,KEIL4好像不可以用32

同小白~  我用的keil5 没用KEIL4 不知是不是你的魔法棒是否设置有问题  一般Keil5都可以向下兼容的
回复

使用道具 举报

ID:536427 发表于 2019-6-16 20:08 | 显示全部楼层
jhv 发表于 2019-6-13 09:45
楼主,我的开发板是STM32f407的,下载后编译没有问题,但串口输入没显示

协议一致吗?   是否IO口配置有问题
回复

使用道具 举报

ID:430698 发表于 2019-6-19 13:45 | 显示全部楼层
好资料 学习中
回复

使用道具 举报

ID:617502 发表于 2019-9-28 11:04 | 显示全部楼层
不错  谢谢楼主
回复

使用道具 举报

ID:660142 发表于 2019-12-13 13:26 来自手机 | 显示全部楼层
我的也是战舰v3的板子确实能用,最近也在学串口,非常感谢楼主的程序
回复

使用道具 举报

ID:763690 发表于 2020-5-28 19:24 | 显示全部楼层
感谢楼主分享!很好的资源
回复

使用道具 举报

ID:840806 发表于 2020-11-9 08:42 | 显示全部楼层
孤夜之舞 发表于 2019-6-12 22:38
小白想问一下STM32用什么编程软件比较好,KEIL4好像不可以用32

我用的Keil uVision5
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表