废话不多说了,直接上代码。

主要介绍led和usart(蓝牙通信)、main的主要代码,亲测有效。

led.c

这里使用LED1(A1)

#include "stm32f10x.h"                  // Device headervoid LED_Init(void)
{RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);GPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1 | GPIO_Pin_2;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA, &GPIO_InitStructure);GPIO_SetBits(GPIOA, GPIO_Pin_1 | GPIO_Pin_2);
}void LED1_ON(void)
{GPIO_SetBits(GPIOA, GPIO_Pin_1);
}void LED1_OFF(void)
{GPIO_ResetBits(GPIOA, GPIO_Pin_1);
}void LED1_Turn(void)
{if (GPIO_ReadOutputDataBit(GPIOA, GPIO_Pin_1) == 0){GPIO_SetBits(GPIOA, GPIO_Pin_1);}else{GPIO_ResetBits(GPIOA, GPIO_Pin_1);}
}void LED2_ON(void)
{GPIO_ResetBits(GPIOA, GPIO_Pin_2);
}void LED2_OFF(void)
{GPIO_SetBits(GPIOA, GPIO_Pin_2);
}void LED2_Turn(void)
{if (GPIO_ReadOutputDataBit(GPIOA, GPIO_Pin_2) == 0){GPIO_SetBits(GPIOA, GPIO_Pin_2);}else{GPIO_ResetBits(GPIOA, GPIO_Pin_2);}
}

led.h

#ifndef __LED_H
#define __LED_Hvoid LED_Init(void);
void LED1_ON(void);
void LED1_OFF(void);
void LED1_Turn(void);
void LED2_ON(void);
void LED2_OFF(void);
void LED2_Turn(void);#endif

serial.c

除了初始化函数外,还使用了Serial_GetRxFlag(void)、Serial_GetRxData(void)用于判断和接收蓝牙发送的信息。中断处理函数USART1_IRQHandler。用于发送后清零

#include "stm32f10x.h"                  // Device header
#include <stdio.h>
#include <stdarg.h>uint16_t Serial_RxData;
uint8_t  Serial_RxFlag;/*** @brief  Serial初始化,通信协议为USART* @param  无* @retval 无*/
void Serial_Init(void)
{//开启时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);//通信引脚TX初始化GPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA, &GPIO_InitStructure);//通信引脚RX初始化GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA, &GPIO_InitStructure);//USART初始化USART_InitTypeDef USART_InitStructure;USART_InitStructure.USART_BaudRate = 9600;USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;USART_InitStructure.USART_Mode = USART_Mode_Tx | USART_Mode_Rx;USART_InitStructure.USART_Parity = USART_Parity_No;USART_InitStructure.USART_StopBits = USART_StopBits_1;USART_InitStructure.USART_WordLength = USART_WordLength_8b;USART_Init(USART1, &USART_InitStructure);//启用USART1中断USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);//中断分组NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//中断初始化NVIC_InitTypeDef NVIC_InitStructure;NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;NVIC_Init(&NVIC_InitStructure);//使能USART1USART_Cmd(USART1, ENABLE);
}/*** @brief  发送一个数据* @param  Byte 要发送的数据* @retval 无*/
void Serial_SendByte(uint8_t Byte)
{USART_SendData(USART1, Byte);while (USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);
}/*** @brief  发送一组数据* @param  Array 要发送的一组数据* @param  Length 数组大小* @retval 无*/
void Serial_SendArray(uint8_t *Array, uint16_t Length)
{uint16_t i;for (i = 0; i < Length; i ++){Serial_SendByte(Array[i]);}
}/*** @brief  发送一串字符* @param  String 要发送的字符串* @retval 无*/
void Serial_SendString(char *String)
{uint8_t i;for (i = 0; String[i] != '\0'; i++){Serial_SendByte(String[i]);}
}/*** @brief  Bluetooth次方函数* @retval 返回值等于X的Y次方*/
uint32_t Serial_POW(uint32_t X,uint32_t Y)
{uint32_t Result = 1;while (Y--){Result *= X;}return Result;
}
/*** @brief  发送一个数字* @param  Number 要发送的数字* @param  Length 数字长度* @retval 无*/
void Serial_SendNumber(uint32_t Number, uint8_t Length)
{uint8_t i;for (i = 0; i < Length; i ++){Serial_SendByte(Number / Serial_POW(10, Length - i - 1) % 10 + '0');}
}/*** @brief  printf重定向到蓝牙 */
int fputc(int ch,FILE *f)
{Serial_SendByte(ch);return ch;
}/*** @brief  封装Sprintf,直接向蓝牙发送字符串 */
void Serial_Printf(char *format, ...)
{char String[100];va_list arg;va_start(arg,format);vsprintf(String,format,arg);va_end(arg);Serial_SendString(String);
}/*** @brief  接收响应* @param  无* @retval 1--接收成功,0--接收失败*/
uint8_t Serial_GetRxFlag(void)
{if (Serial_RxFlag == 1){Serial_RxFlag = 0;return 1;}return 0;
}/*** @brief  接收数据* @param  无* @retval Bluetooth_RxData 蓝牙发送过来的数据*/
uint8_t Serial_GetRxData(void)
{return Serial_RxData;
}/*** @brief  接收中断函数* @param  无* @retval 无*/
void USART1_IRQHandler(void)
{if (USART_GetITStatus(USART1, USART_IT_RXNE) == SET){Serial_RxData = USART_ReceiveData(USART1);//保存接收到的数据,RXNE自动清零Serial_RxFlag = 1;USART_ClearITPendingBit(USART1, USART_IT_RXNE);}}

serial.h

#ifndef _SERIAL_H
#define _SERIAL_H#include <stdio.h>
#include <string.h>void Serial_Init(void);
void Serial_SendByte(uint8_t Byte);
void Serial_SendArray(uint8_t *Array, uint16_t Length);
void Serial_SendString(char *String);
void Serial_SendNumber(uint32_t Number, uint8_t Length);
void Serial_Printf(char *format, ...);
uint8_t Serial_GetRxFlag(void);
uint8_t Serial_GetRxData(void);#endif

main.c

这里虽然有其它的头文件,但没有使用,我们使用要用的文件即可。

#include "stm32f10x.h"                  // Device header
#include "Delay.h"            //延时
#include "OLED.h"            //OLED模块
#include "LED.h"            //LED灯模块
#include "Serial.h"            //蓝牙通信模块uint16_t AT;    //接收蓝牙发过来的指令
//char SendString[100];        //向蓝牙发送的显示信息
//uint8_t i;int main(void)
{OLED_Init();Serial_Init();LED_Init();    while (1){//erial_SendString(SendString);if (Serial_GetRxFlag() == 1)//判断串口是否有信息{AT = Serial_GetRxData();//接收蓝牙发送的指令        if(AT=='A'){    //接收到字符A,亮灯LED1_ON();Delay_ms(500);}if(AT=='B'){LED1_OFF();Delay_ms(500);}}        }
}

stm32之蓝牙控制通信(JDY-24)led初级应用相关推荐

  1. Arduino学习记录——蓝牙控制舵机(含LED指示灯)

     文章目录 前言 一.学习目的 二.模块介绍 三.代码记录 前言   今天记录一下有关舵机的学习,由于我的舵机在51和STM32系列单片机上都好像有供电不足的情况,然后我的电源模块也没到,所以就用Ar ...

  2. STM32实现蓝牙HC-06通信

    简介 硬件模块:HC-06蓝牙串口通信模块 串口:USART1 接线:RXD–PC9,TXD–PC10,VCC–5V/3V,GND–GND 蓝牙模块上有一个LED,LED 指示蓝牙连接状态, 闪烁表示 ...

  3. 小白入门STM32(1)----手机蓝牙控制STM32单片机点亮LED

    文章目录 引言导读 一.通信基础知识 1.1 通信到底传输的是什么? 1.2 比特率和波特率 习题 1.1 双工和单工 习题 1.2 串行和并行 1.3 异步通信和同步通信 习题 二.连接STM32单 ...

  4. STM32蓝牙控制循迹避障小车源代码——4.蓝牙控制

    STM32蓝牙控制循迹避障小车源代码--4.蓝牙控制 注意-所需模块: 蓝牙模块 接线: 串口通信 A2–RX A3–TX 所有的代码都是直接从工程里面复制的,实测是没有问题的. 蓝牙控制原理: 设计 ...

  5. STM32CubeIDE开发(二十五), 物联网应用之stm32的蓝牙通信设计

    一.蓝牙通信技术 蓝牙技术是一种点对点点对面的网络构架,他可以在限制的范围内以很快的速度传输网络数据,在物联网应用中,支持网状网络的物联网短距离无线通信.目前它还被广泛用于智能可穿戴设备.智能门锁.智 ...

  6. HC-05(ZS-040)蓝牙模块使用详情(蓝牙模块配置、手机蓝牙控制单片机、蓝牙与蓝牙之间的通信)含51、32程序

    HC-05是一款主从一体化的蓝牙模块,因此其使用起来比较方便,只需要进行简单的配置即可. 本文就手把手的介绍小白入手模块后如何使用. 对于模块使用:1.蓝牙配置→2.手机与蓝牙的传输→3.手机通过蓝牙 ...

  7. 手机APP开发之MIT Appinventor详细实战教程(一),利用通过蓝牙控制单片机,以及实现单片机与android设备之间的串口通信

    目录 (一)前期软件准备和硬件准备 ( 二 ) 实现的思路和操作原理 ( 三) 具体的操作方法 MIT Appinventor 是编程领域较为受欢迎且适用的编程软件 ,因其操作流程和使用方法简单,一直 ...

  8. 基于STM32蓝牙控制的app智能台灯设计

    提示:记录毕设 文章目录 前言 一.任务书 1.1设计(研究)目标: 1.2设计(研究)内容: 二.代码思路 三.硬件设计 3.1总体设计 3.2蓝牙部分设计 四.联系我们 五.部分代码 喜欢请点赞哦 ...

  9. STM32蓝牙控制循迹避障小车源代码——3.舵机、超声波测距模块

    STM32蓝牙控制循迹避障小车源代码--3.舵机.超声波测距模块 注意-所需模块: US-015超声波模块 SG90舵机云台 接线:舵机超声波: A1–P2.7 B8–Trig B9–Echo 代码 ...

最新文章

  1. 解决vue: 无法将“vue”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称...
  2. 冒死揭秘安利_赵丽颖新剧开播备受争议?冒死安利
  3. P2P穿透四种NAT类型
  4. 【HDU 5384】Danganronpa(AC自己主动机)
  5. chrome网页另存pdf_如何在Google Chrome中将网页另存为PDF
  6. Apizza-快速生成Api文档
  7. 【学习笔记】Creo如何创建钣金件(利用骨架)
  8. mysql服务注册表删除_怎么彻底删除mysql服务(清理注册表)详解
  9. 牛客小白月赛2 H 武 【Dijkstra】
  10. 如果在魔兽世界中,做一个合格野性德
  11. 软件版本GA、RC、beta等含义
  12. 安装GPU版本的pytorch
  13. 智能制造-低时延满足制造需求
  14. git合并多次提交为一次提交
  15. 餐饮app开发市场前景如何?行业竞争激烈吗?
  16. 整理!这10款PC端软件,设计师必备!
  17. JMeter逻辑控制器 详解
  18. redis搭建三主三从架构
  19. 科学家表示英国脱欧可能会终结其在AI领域的领导地位
  20. 考研报名电脑显示服务器错误,2021考研报名常见问题:网报过程中,发现考生姓名、证件号码等信息有误怎么办?...

热门文章

  1. 手把手教你如何找到属于你自己的阿里云镜像加速器
  2. JavaFX战旗类游戏开发 第三课 创建游戏角色
  3. 智慧社区是如何实现节能减排的
  4. vue hash模式下微信授权登录
  5. Displaytag用法整理
  6. java中Super到底是什么意思?必须举例说明!
  7. 某cms代码审计RCE艰难bypass(思路清奇)
  8. librtmp 源码分析笔记 WriteN
  9. 计算机应用基础自荐信,计算机应用基础信息技术基础《项目3-1竞选自荐信》教案.doc...
  10. BindingException 绑定异常