用的正点原子的串口模板
V3接线
效果,可以控制PB5开关

#include "led.h"
#include "delay.h"
#include "key.h"
#include "sys.h"
#include "usart.h"int main(void)
{delay_init();                                  //延时函数初始化NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级uart_init(9600);                               //串口初始化为115200LED_Init();                                       //LED端口初始化KEY_Init();                                       //初始化与按键连接的硬件接口while (1){// GPIO_SetBits(GPIOB, GPIO_Pin_5); //PB.5 输出高//   delay_ms(50);// GPIO_ResetBits(GPIOB, GPIO_Pin_5);//    delay_ms(50);if (USART_RX_STA == 1){USART_SendData(USART1, Res);if (Res == 'a'){GPIO_SetBits(GPIOB, GPIO_Pin_5); //PB.5 输出高delay_ms(50);}if (Res == 'b')   //判断Res最低位{GPIO_ResetBits(GPIOB, GPIO_Pin_5); //PB.5 输出高delay_ms(50);}Res = 0;USART_RX_STA = 0;}}
}

usart.h:

#ifndef __USART_H
#define __USART_H
#include "stdio.h"
#include "sys.h"
#define USART_REC_LEN           200     //定义最大接收字节数 200
#define EN_USART1_RX            1       //使能(1)/禁止(0)串口1接收
extern u8 Res;
extern u8  USART_RX_BUF[USART_REC_LEN]; //接收缓冲,最大USART_REC_LEN个字节.末字节为换行符
extern u16 USART_RX_STA;                //接收状态标记
//如果想串口中断接收,请不要注释以下宏定义
void uart_init(u32 bound);
#endif

usart.c和中断服务函数:

#include "sys.h"
#include "usart.h"
//
//如果使用ucos,则包括下面的头文件即可.
#if SYSTEM_SUPPORT_OS
#include "includes.h" //ucos 使用
#endif
u8 Res;
//
//
//加入以下代码,支持printf函数,而不需要选择use MicroLIB
#if 1
#pragma import(__use_no_semihosting)
//标准库需要的支持函数
struct __FILE
{int handle;
};FILE __stdout;
//定义_sys_exit()以避免使用半主机模式
void _sys_exit(int x)
{x = x;
}
//重定义fputc函数
int fputc(int ch, FILE *f)
{while ((USART1->SR & 0X40) == 0); //循环发送,直到发送完毕USART1->DR = (u8)ch;return ch;
}
#endif/*使用microLib的方法*/
/*
int fputc(int ch, FILE *f)
{USART_SendData(USART1, (uint8_t) ch);while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET) {}  return ch;
}
int GetKey (void)  { while (!(USART1->SR & USART_FLAG_RXNE));return ((int)(USART1->DR & 0x1FF));
}
*/#if EN_USART1_RX //如果使能了接收
//串口1中断服务程序
//注意,读取USARTx->SR能避免莫名其妙的错误
u8 USART_RX_BUF[USART_REC_LEN]; //接收缓冲,最大USART_REC_LEN个字节.
//接收状态
//bit15, 接收完成标志
//bit14, 接收到0x0d
//bit13~0,   接收到的有效字节数目
u16 USART_RX_STA = 0; //接收状态标记void uart_init(u32 bound)
{//GPIO端口设置GPIO_InitTypeDef GPIO_InitStructure;USART_InitTypeDef USART_InitStructure;NVIC_InitTypeDef NVIC_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1 | RCC_APB2Periph_GPIOA, ENABLE); //使能USART1,GPIOA时钟//USART1_TX   GPIOA.9GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; //PA.9GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用推挽输出GPIO_Init(GPIOA, &GPIO_InitStructure);         //初始化GPIOA.9//USART1_RX   GPIOA.10初始化GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;              //PA10GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; //浮空输入GPIO_Init(GPIOA, &GPIO_InitStructure);               //初始化GPIOA.10//Usart1 NVIC 配置NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 3; //抢占优先级3NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;       //子优先级3NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;             //IRQ通道使能NVIC_Init(&NVIC_InitStructure);                            //根据指定的参数初始化VIC寄存器//USART 初始化设置USART_InitStructure.USART_BaudRate = bound;                                       //串口波特率USART_InitStructure.USART_WordLength = USART_WordLength_8b;                     //字长为8位数据格式USART_InitStructure.USART_StopBits = USART_StopBits_1;                          //一个停止位USART_InitStructure.USART_Parity = USART_Parity_No;                             //无奇偶校验位USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; //无硬件数据流控制USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;                 //收发模式USART_Init(USART1, &USART_InitStructure);    //初始化串口1USART_ITConfig(USART1, USART_IT_RXNE, ENABLE); //开启串口接受中断USART_Cmd(USART1, ENABLE);                     //使能串口1
}void USART1_IRQHandler(void) //串口1中断服务程序
{if (USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) //接收中断 串口1收到的数据不等于0{USART_ClearITPendingBit(USART1, USART_IT_RXNE); //清除中断标志位Res = USART_ReceiveData(USART1);             //读取接收到的数据USART_RX_STA=1;}
}#endif

STM32串口蓝牙实验--蓝牙控制小灯相关推荐

  1. ESP01S连接STM32实现阿里云云平台控制小灯的亮灭

    目录 一.ESP01S与STM32的连接 二.接收阿里云平台发来的数据 三.解析数据 四.根据数据进行状态判断 五.可视化界面的设计 一.ESP01S与STM32的连接 ESP01S与STM32的通信 ...

  2. 7-51单片机ESP8266学习-AT指令(测试TCP服务器--51单片机程序配置8266,用手机TCP调试助手发信息给单片机控制小灯的亮灭)

    http://www.cnblogs.com/yangfengwu/p/8759294.html  如不做任何说明默认最头上的链接为上一篇链接,末尾的链接为下一篇链接 先把源码和资料链接放到这里 链接 ...

  3. STM32——串口通信实验

    STM32串口通信实验:字符.字符串.数组 准备工作 编程逻辑顺序 初始化结构体 1.USART初始化结构体: 2.同步时钟初始化结构体: 源码 准备工作 1.找一个空白文件,新建usart.c 和u ...

  4. 51单片机:电脑向串口发送数据并控制LED灯

    电脑向串口发送数据后,控制LED灯,并返回发送的数据 程序如下 #include"regx52.h" #include"intrins.h" unsigned ...

  5. Arduino+ESP8266手机控制小灯亮灭及常见问题

    最近在接触Arduino和ESP8266模块,比较基础的就是运用Arduino IDE软件.ESP8266模块和一款手机软件来控制8266测试板上的小灯亮灭. 项目软件: Arduino IDE软件 ...

  6. STM32串口中断实验总结函数的初始化必须在变量的初始化之后在进行!

    在进行串口的实验的时候,自己没有看教程,写了一段代码,但是进行编译之后发现一直有错误,就算我把代码更改之后还是一直有错误.对比了官方给的教程之后发现唯一的不同之处就是我的有一个函数的初始化是在变量的初 ...

  7. STM32(四)--------按键控制LED灯

    STM32--------按键控制LED灯 知识介绍 工程文件放置 只有在添加进这一串之后,才能使用头文件集合 stm32f10x_conf.h 选择类型 初始化时钟从哪找 在stm32f10x_rc ...

  8. cc2530 按键中断实验——按键控制LED灯的亮灭

    在本次学习中,主要通过外部中断来控制LED的亮灭. 首先,先查看相关电路图.由图可知,当CC2530端口1的1号引脚输出低电平时,LED3将被点亮,当按键31按下时,端口1的1号引脚将为低电平,抬起时 ...

  9. 基于STM32的红外人体感应器控制LED灯的状态

    文章目录 一.红外人体感应器的介绍 二.利用红外人体感应器实现控制LED灯 三.总结 一.红外人体感应器的介绍 产品参数 产品特点 ①全自动感应 当人进入其感应范围则输出高电平,人离开感应范围则自动延 ...

  10. arduino蓝牙控制小灯

    本例程演示从手机蓝牙串口接收指令,点亮或熄灭13脚的LED,或者调整亮度. 接收指令格式:"1"点亮,"0"熄灭.) 串口是异步接收的,用parseInt()查 ...

最新文章

  1. 第二阶段个人冲刺10
  2. textarea 高度调整
  3. [物理学与PDEs]第3章第2节 磁流体力学方程组 2.4 不可压情形的磁流体力学方程组...
  4. 再学 GDI+[79]: 区域(8) - Transform - 区域的 Matrix 变换
  5. mysql数据库的安装
  6. Linux执行shell脚本的四种方式
  7. 乘积的C语言,c语言矩阵相乘
  8. python os.system关闭log_又到牛市!带你学习一个python强大证券数据分析工具
  9. java字符串为空抛出异常_Java 判断字符串是否为空的四种方法,及效率比较。
  10. mysql 基本概念学习(时间,事务)
  11. 苹果就降速门道歉,将 iPhone 电池更换价格下调至 218 元!
  12. 未来的云计算基础设施长什么样?
  13. latex安装血泪史及错误解决
  14. JPG/PNG转真SVG,非base64
  15. 11月 第4周 GitChat 话题排行榜
  16. win7 64位系统加载dsoframer.ocx问题解决方法
  17. performSelector一系列方法调用和延时调用导致的内存泄露
  18. 墨尔本python培训班_墨的解释|墨的意思|汉典“墨”字的基本解释
  19. centos 关于logrotate的使用
  20. 邀您一同分享财富乐歪歪童装加盟正火热进行中

热门文章

  1. AI-语音处理理论与应用-语音处理简介
  2. 论文学习笔记 PrivateDrop: Practical Privacy-Preserving Authentication for Apple AirDrop
  3. win10系统下,屏幕录制专家如何录制耳机里面的声音
  4. 集合20210801
  5. 移动宽带密码重置----如何更换路由器----------------绝杀技
  6. 算法设计与分析第七章习题解答与学习指导(第2版)屈婉婷 刘田 张立昂 王捍贫编著 清华大学出版社
  7. shimano 型号详解 (zz)
  8. 小程序怎么自定义导航栏,导航栏放图片、设置高度
  9. audio插入背景音乐_vue.js怎么添加背景音乐
  10. 谁曾从谁的时光里停留