STM32蓝牙控制LED灯开关
介绍
STM32f103相关,USART1,USART2,led灯,蓝牙模块,通过手机app发送指令蓝牙转发实现对led的控制。
代码片段
#include "stm32f10x.h"
#include "GPIOLIKE51.h"
#include "stdio.h"u8 usart1_buf[100]={0},usart3_buf[100]={0};
u16 index1=0,index3=0,flag1=0,flag3=0;int fputc( int ch, FILE *f ){USART_SendData(USART1,(u8) ch );while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)==RESET);return ch;
}void delay(uint32_t num){while(num--);
}void delay_ms(uint32_t n){while(n--){SysTick->CTRL = 0; //Disable SysTick 关闭系统定时器SysTick->LOAD = 9000; //Count from 255 to 0 (256 cycles) 配置计数值SysTick->VAL = 0; //CLear current value as well as count flag 清空当前寄存器计数值SysTick->CTRL = 1; //Enable SysTick timer with processor clock 使能系统定时器while((SysTick->CTRL & (1<<16)) == 0); //Wait until count flag is set} SysTick->CTRL = 0; //Disable SysTick 关闭系统定时器
}void USART1_init(){GPIO_InitTypeDef GPIO_InitStructure;//配置串口结构体USART_InitTypeDef USART_InitStructure;//NVIC结构体NVIC_InitTypeDef NVIC_InitStructure;//使能GPIO硬件时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);//使能串口1硬件时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);//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 USART_InitStructure.USART_BaudRate = 9600;USART_InitStructure.USART_WordLength = USART_WordLength_8b;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;/* Enable the USARTy Interrupt */NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=2 ;//抢占优先级1NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; //子优先级1NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道使能NVIC_Init(&NVIC_InitStructure);USART_Init(USART1, &USART_InitStructure); //初始化串口1USART_ITConfig(USART1, USART_IT_RXNE, ENABLE); //配置为接收中断USART_Cmd(USART1, ENABLE); //使能串口1
}void USART3_init(){GPIO_InitTypeDef GPIO_InitStructure;//配置串口结构体USART_InitTypeDef USART_InitStructure;//NVIC结构体NVIC_InitTypeDef NVIC_InitStructure;//使能GPIO硬件时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);//使能串口3硬件时钟RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3, ENABLE);//USART3_TX GPIOB.10GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; //PA.9GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用推挽输出GPIO_Init(GPIOB, &GPIO_InitStructure); //初始化GPIOA.9//USART3_RX GPIOB.11初始化GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11; //PA10GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; //浮空输入GPIO_Init(GPIOB, &GPIO_InitStructure); //初始化GPIOA.10 USART_InitStructure.USART_BaudRate = 9600;USART_InitStructure.USART_WordLength = USART_WordLength_8b;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;/* Enable the USARTy Interrupt */NVIC_InitStructure.NVIC_IRQChannel = USART3_IRQn;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=2 ;//抢占优先级2NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1; //子优先级1NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道使能NVIC_Init(&NVIC_InitStructure);USART_Init(USART3, &USART_InitStructure); //初始化串口3USART_ITConfig(USART3, USART_IT_RXNE, ENABLE); //配置为接收中断USART_Cmd(USART3, ENABLE); //使能串口3
}void USART1_SEND_STR(char *pstr){char *p = pstr;while(*p != '\0'){USART_SendData(USART1, *p);while(USART_GetFlagStatus(USART3,USART_FLAG_TXE)==RESET);USART_ClearFlag(USART1, USART_FLAG_TXE);p++;}
}void USART3_SEND_STR(char *pstr){char *p = pstr;while(*p != '\0'){USART_SendData(USART3, *p);while(USART_GetFlagStatus(USART3,USART_FLAG_TXE)==RESET);USART_ClearFlag(USART3, USART_FLAG_TXE);p++;}
}//蓝牙AT指令配置模块
void BLE_CONFIG_SET(){//发送AT测试指令USART3_SEND_STR("AT\r\n");delay_ms(500);//发送AT更改模块名指令USART3_SEND_STR("AT+NAMEble_01\r\n");delay_ms(600);//发送AT重启模块名指令USART3_SEND_STR("AT+RESET\r\n");delay_ms(2000);
}//主函数,从这里执行
int main(void){GPIO_InitTypeDef GPIO_InitStruct;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);GPIO_InitStruct.GPIO_Mode=GPIO_Mode_Out_PP;GPIO_InitStruct.GPIO_Pin=GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15;GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;GPIO_Init(GPIOC, &GPIO_InitStruct);GPIO_SetBits(GPIOC, GPIO_Pin_13);PCout(14)=0;PCout(15)=0;//pc串口USART1_init();//蓝牙串口USART3_init();NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //蓝牙模块配置BLE_CONFIG_SET();while(1){PCout(13)=1;delay_ms(1000);PCout(13)=0;delay_ms(1000);}
}void USART1_IRQHandler(void)
{ u16 code;if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET){ USART_ClearITPendingBit(USART1, USART_IT_RXNE);//Removal of receiving interrupt flagcode=USART_ReceiveData(USART1);printf("%c", code);usart1_buf[index1] = code;index1++; if(code == 0x0a){index1 = 0;flag1 = 1;}}
}void USART3_IRQHandler(void)
{u16 code;if(USART_GetITStatus(USART3, USART_IT_RXNE) != RESET){ USART_ClearITPendingBit(USART3, USART_IT_RXNE);code=USART_ReceiveData(USART3);printf("%c", code);usart3_buf[index3] = code;index3++;if(code == 0x0a){index3 = 0;flag3 = 1;}//开灯if(code == 0x31){PCout(14)=1;}//关灯if(code == 0x32){PCout(14)=0;}//开灯if(code == 0x33){PCout(15)=1;}//关灯if(code == 0x34){PCout(15)=0;}}
}
蓝牙串口app下载地址
STM32蓝牙控制LED灯开关相关推荐
- 利用 Andorid 手机连接 Arduino 并控制 LED灯开关
利用 Andorid 手机连接 Arduino 并控制 LED灯开关 ***首先,将 Arduino 断电***,然后按着蓝牙模块上的黑色按钮,再让 Arduino 通电,如果蓝牙模块指示灯按2秒的频 ...
- 基于STM32蓝牙控制的app智能台灯设计
提示:记录毕设 文章目录 前言 一.任务书 1.1设计(研究)目标: 1.2设计(研究)内容: 二.代码思路 三.硬件设计 3.1总体设计 3.2蓝牙部分设计 四.联系我们 五.部分代码 喜欢请点赞哦 ...
- STM32蓝牙控制循迹避障小车源代码——4.蓝牙控制
STM32蓝牙控制循迹避障小车源代码--4.蓝牙控制 注意-所需模块: 蓝牙模块 接线: 串口通信 A2–RX A3–TX 所有的代码都是直接从工程里面复制的,实测是没有问题的. 蓝牙控制原理: 设计 ...
- STM32蓝牙控制循迹避障小车——2.循迹模块
STM32蓝牙控制循迹避障小车源代码--2.循迹模块 注意-所需模块: 接线:四个循迹模块(从左到右分别为1,2,3,4) B4–第1个循迹模块的D0 B5–第2个循迹模块的D0 B6–第3个循迹模块 ...
- STM32蓝牙控制循迹避障小车源代码——3.舵机、超声波测距模块
STM32蓝牙控制循迹避障小车源代码--3.舵机.超声波测距模块 注意-所需模块: US-015超声波模块 SG90舵机云台 接线:舵机超声波: A1–P2.7 B8–Trig B9–Echo 代码 ...
- STM32定时器控制LED灯闪烁及PWM练习
一.STM32定时器控制LED灯闪烁 1.相关配置 1)配置RCC和SYS 2)配置IO 配置PC15,并命名为D1. 3)配置定时器 选定时器2,配置Clock Source为Internal Cl ...
- 使用 Arduino 和 Python在 Bluemix 上开发一个 IoT 应用程序之控制LED灯开关
上篇"[物联网(IoT)开发]Arduino 入门 Hello World(LED闪烁)"只是通过将一段程序烧录到Arduino开发板上控制LEC闪烁,没有任何连网动作,也就是说断 ...
- 【物联网(IoT)开发】使用 Arduino 和 Python在 Bluemix 上开发一个 IoT 应用程序之控制LED灯开关
上篇"[物联网(IoT)开发]Arduino 入门 Hello World(LED闪烁)"只是通过将一段程序烧录到Arduino开发板上控制LEC闪烁,没有任何连网动作,也就是说断 ...
- 安卓手机与蓝牙模块联合调试(二)—— 单片机蓝牙控制LED灯亮灭(上)
系列博文: (1)安卓手机与蓝牙模块联合调试(一)--蓝牙模块的串口通讯 (2)安卓手机与蓝牙模块联合调试(二)-- 单片机蓝牙控制LED灯亮灭(上) (3)安卓手机与蓝牙模块联合调试(三)-- 单片 ...
- STM32按钮控制LED灯的开关
Hi, I'm Shendi 在之前已经可以控制 PC13 LED灯了,这次加上按钮来控制 首先上效果 STM32按钮控制LED 我使用的是四脚按钮,默认引脚弯折相同的相通,不同不同,按下后四脚都通 ...
最新文章
- LeetCode简单题之整理字符串
- 2744 养鱼喂妹纸
- 【思维】中位数与顺序统计
- 太赞了!开源下载机器学习经典书 PRML所有相关资料:中文译本,官方代码,课程视频,学习笔记...
- 《剑指offer》链表中环的入口节点
- Orace用户创建及权限分配
- 1.3.2 Jetty 的基本配置(2)
- 机器学习中遇到的问题
- ssm中web配置各框架的配置文件路径方式
- 解决ISCROLL单击变双击的BUG
- c语言 快排,C语言 快排函数
- python list超出范围_错误:列表索引超出范围Python(Error: List Index out of Range Python)...
- 迅雷的地址解析--把自己的下载地址变成迅雷链接
- 云之讯融合通讯开放平台_提供融合语音,短信,VoIP,视频和IM等通讯API及SDK。...
- 红米5a android 版本,【红米5A安卓7.1.2线刷包】MIUI V9.5.3.0.NCKCNFA稳定版 精简线刷包...
- 软件测试的36个常用术语
- 构建属于自己的 jre Docker 镜像
- html5语音闹钟代码,HTML5+CSS3闹钟动画特效源码
- 实体鉴别GB/T 15843研究(二)——GB/T 15843.2采用对称加密算法
- 2021年10种手机app界面设计用户体验趋势