介绍

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灯开关相关推荐

  1. 利用 Andorid 手机连接 Arduino 并控制 LED灯开关

    利用 Andorid 手机连接 Arduino 并控制 LED灯开关 ***首先,将 Arduino 断电***,然后按着蓝牙模块上的黑色按钮,再让 Arduino 通电,如果蓝牙模块指示灯按2秒的频 ...

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

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

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

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

  4. STM32蓝牙控制循迹避障小车——2.循迹模块

    STM32蓝牙控制循迹避障小车源代码--2.循迹模块 注意-所需模块: 接线:四个循迹模块(从左到右分别为1,2,3,4) B4–第1个循迹模块的D0 B5–第2个循迹模块的D0 B6–第3个循迹模块 ...

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

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

  6. STM32定时器控制LED灯闪烁及PWM练习

    一.STM32定时器控制LED灯闪烁 1.相关配置 1)配置RCC和SYS 2)配置IO 配置PC15,并命名为D1. 3)配置定时器 选定时器2,配置Clock Source为Internal Cl ...

  7. 使用 Arduino 和 Python在 Bluemix 上开发一个 IoT 应用程序之控制LED灯开关

    上篇"[物联网(IoT)开发]Arduino 入门 Hello World(LED闪烁)"只是通过将一段程序烧录到Arduino开发板上控制LEC闪烁,没有任何连网动作,也就是说断 ...

  8. 【物联网(IoT)开发】使用 Arduino 和 Python在 Bluemix 上开发一个 IoT 应用程序之控制LED灯开关

    上篇"[物联网(IoT)开发]Arduino 入门 Hello World(LED闪烁)"只是通过将一段程序烧录到Arduino开发板上控制LEC闪烁,没有任何连网动作,也就是说断 ...

  9. 安卓手机与蓝牙模块联合调试(二)—— 单片机蓝牙控制LED灯亮灭(上)

    系列博文: (1)安卓手机与蓝牙模块联合调试(一)--蓝牙模块的串口通讯 (2)安卓手机与蓝牙模块联合调试(二)-- 单片机蓝牙控制LED灯亮灭(上) (3)安卓手机与蓝牙模块联合调试(三)-- 单片 ...

  10. STM32按钮控制LED灯的开关

    Hi, I'm Shendi 在之前已经可以控制 PC13 LED灯了,这次加上按钮来控制 首先上效果 STM32按钮控制LED 我使用的是四脚按钮,默认引脚弯折相同的相通,不同不同,按下后四脚都通 ...

最新文章

  1. LeetCode简单题之整理字符串
  2. 2744 养鱼喂妹纸
  3. 【思维】中位数与顺序统计
  4. 太赞了!开源下载机器学习经典书 PRML所有相关资料:中文译本,官方代码,课程视频,学习笔记...
  5. 《剑指offer》链表中环的入口节点
  6. Orace用户创建及权限分配
  7. 1.3.2 Jetty 的基本配置(2)
  8. 机器学习中遇到的问题
  9. ssm中web配置各框架的配置文件路径方式
  10. 解决ISCROLL单击变双击的BUG
  11. c语言 快排,C语言 快排函数
  12. python list超出范围_错误:列表索引超出范围Python(Error: List Index out of Range Python)...
  13. 迅雷的地址解析--把自己的下载地址变成迅雷链接
  14. 云之讯融合通讯开放平台_提供融合语音,短信,VoIP,视频和IM等通讯API及SDK。...
  15. 红米5a android 版本,【红米5A安卓7.1.2线刷包】MIUI V9.5.3.0.NCKCNFA稳定版 精简线刷包...
  16. 软件测试的36个常用术语
  17. 构建属于自己的 jre Docker 镜像
  18. html5语音闹钟代码,HTML5+CSS3闹钟动画特效源码
  19. 实体鉴别GB/T 15843研究(二)——GB/T 15843.2采用对称加密算法
  20. 2021年10种手机app界面设计用户体验趋势

热门文章

  1. 如何利用数据挖掘让RTB广告效果倍增?
  2. 【2019年01月18日】股息率分红最高排名
  3. DEDE标签调用说明
  4. 爱情故事:追忆似水流年 回味永恒的爱恋
  5. 餐厅点菜c语言程序代码,C语言编程——餐馆点菜
  6. C语言自制简单点菜系统
  7. 【CATIA】系统架构 | 达索系统百世慧®
  8. OPENGL回归原点
  9. 腾讯开发微信花了多少钱?程序员告诉你有多劳民伤财
  10. 热衷于摸鱼的大一新生