当前位置: 首页 > wzjs >正文

普宁17网站一起做淘宝seo营销外包公司

普宁17网站一起做淘宝,seo营销外包公司,织梦修改网站源代码,上海中心设计公司是谁基于STM32_HAL库的HC-08蓝牙插座 文章目录 基于STM32_HAL库的HC-08蓝牙插座一、项目需求二、硬件连接三、项目实现3.1 CubeMX配置3.2 以阻塞的方式实现3.3 以中断的方式实现 一、项目需求 通过手机可以控制开发板上的LED或者继电器 二、硬件连接 首先将HC-08蓝牙模块连接到我们…

基于STM32_HAL库的HC-08蓝牙插座

文章目录

  • 基于STM32_HAL库的HC-08蓝牙插座
    • 一、项目需求
    • 二、硬件连接
    • 三、项目实现
      • 3.1 CubeMX配置
      • 3.2 以阻塞的方式实现
      • 3.3 以中断的方式实现

一、项目需求

通过手机可以控制开发板上的LED或者继电器

在这里插入图片描述


二、硬件连接

在这里插入图片描述

首先将HC-08蓝牙模块连接到我们开发板的串口一引脚,注意要交叉连接,LED连接到STM32的PB8引脚


三、项目实现

3.1 CubeMX配置

  1. 配置Debug

    在这里插入图片描述

  2. 打开RCC配置时钟,将高速时钟配置成Crystal/Ceramic Resonator

    在这里插入图片描述

  3. 点击配置时钟选项,把时钟配置成高速外部时钟HSE,并且通过PLLCLK倍频到72MHZ按下回车之后就为芯片内部的功能分配好了对应的时钟频率。

    在这里插入图片描述

  4. 选择左侧的USART1,然后选择异步通信模式,配置波特率、数据位、奇偶校验位、停止位等

    在这里插入图片描述

  5. 配置PB8引脚为:GPIO_Output模式,并设置初始电平为高电平

    在这里插入图片描述

  6. 使能USART1中断,阻塞方式时不需要✔

    在这里插入图片描述

  7. 接着对我们的工程进行配置,配置完成之后点击右上角的 GENERATE CODE 生成工程

    在这里插入图片描述


3.2 以阻塞的方式实现

#include "main.h"
#include "usart.h"
#include "gpio.h"/* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes */
#include <stdio.h>
#include <string.h>/* USER CODE END Includes *//* Private typedef -----------------------------------------------------------*/
/* USER CODE BEGIN PTD *//* USER CODE END PTD *//* Private define ------------------------------------------------------------*/
/* USER CODE BEGIN PD */
/* USER CODE END PD *//* Private macro -------------------------------------------------------------*/
/* USER CODE BEGIN PM *//* USER CODE END PM *//* Private variables ---------------------------------------------------------*//* USER CODE BEGIN PV *//* USER CODE END PV *//* Private function prototypes -----------------------------------------------*/
void SystemClock_Config(void);
/* USER CODE BEGIN PFP *//* USER CODE END PFP *//* Private user code ---------------------------------------------------------*/
/* USER CODE BEGIN 0 *//* USER CODE END 0 *//*** @brief  The application entry point.* @retval int*/
int main(void)
{/* USER CODE BEGIN 1 */char Buffer[12] = {0};/* USER CODE END 1 *//* MCU Configuration--------------------------------------------------------*//* Reset of all peripherals, Initializes the Flash interface and the Systick. */HAL_Init();/* USER CODE BEGIN Init *//* USER CODE END Init *//* Configure the system clock */SystemClock_Config();/* USER CODE BEGIN SysInit *//* USER CODE END SysInit *//* Initialize all configured peripherals */MX_GPIO_Init();MX_USART1_UART_Init();/* USER CODE BEGIN 2 *//* USER CODE END 2 *//* Infinite loop *//* USER CODE BEGIN WHILE */while (1){/* USER CODE END WHILE *//* USER CODE BEGIN 3 */HAL_UART_Receive(&huart1, (uint8_t *)Buffer, sizeof(Buffer), 100);									// 接收来自APP的串口数据if(strcmp(Buffer, "open") == 0){																	// 判断是否是open指令HAL_GPIO_WritePin(GPIOB, GPIO_PIN_8, GPIO_PIN_RESET);if(HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_8) == GPIO_PIN_RESET){HAL_UART_Transmit(&huart1, (uint8_t *)"LED已经打开\r\n", strlen("LED已经打开\r\n"), 100);		// 返回结果给APP}}else if(strcmp(Buffer, "close") == 0){																// 判断是否是close指令HAL_GPIO_WritePin(GPIOB, GPIO_PIN_8, GPIO_PIN_SET);if(HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_8) == GPIO_PIN_SET){HAL_UART_Transmit(&huart1, (uint8_t *)"LED已经关闭\r\n", strlen("LED已经关闭\r\n"), 100);	   	// 返回结果给APP}}else{if(Buffer[0] != '\0'){																			// 判断是否是无效指令HAL_UART_Transmit(&huart1, (uint8_t *)"指令发送错误\r\n", strlen("指令发送错误\r\n"), 100);}}memset(Buffer, '\0', sizeof(Buffer));}/* USER CODE END 3 */
}

3.3 以中断的方式实现

#include "main.h"
#include "usart.h"
#include "gpio.h"/* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes */#include <stdio.h>
#include <string.h>/* USER CODE END Includes *//* Private typedef -----------------------------------------------------------*/
/* USER CODE BEGIN PTD *//* USER CODE END PTD *//* Private define ------------------------------------------------------------*/
/* USER CODE BEGIN PD *///串口接收缓存(1字节)
uint8_t buf=0;//定义最大接收字节数 200,可根据需求调整
#define UART1_REC_LEN 200// 接收缓冲, 串口接收到的数据放在这个数组里,最大UART1_REC_LEN个字节
uint8_t UART1_RX_Buffer[UART1_REC_LEN];//  接收状态
//  bit15,      接收完成标志
//  bit14,      接收到0x0d
//  bit13~0,    接收到的有效字节数目
uint16_t UART1_RX_STA=0;/* USER CODE END PD *//* Private macro -------------------------------------------------------------*/
/* USER CODE BEGIN PM *//* USER CODE END PM *//* Private variables ---------------------------------------------------------*//* USER CODE BEGIN PV *//* USER CODE END PV *//* Private function prototypes -----------------------------------------------*/
void SystemClock_Config(void);
/* USER CODE BEGIN PFP *//* USER CODE END PFP *//* Private user code ---------------------------------------------------------*/
/* USER CODE BEGIN 0 *//* 接收完成回调函数,收到一个数据后,在这里处理 */
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{// 判断中断是由哪个串口触发的if(huart->Instance == USART1){// 判断接收是否完成(UART1_RX_STA bit15 位是否为1)if((UART1_RX_STA & 0x8000) == 0){// 如果已经收到了 0x0d (回车),if(UART1_RX_STA & 0x4000){// 则接着判断是否收到 0x0a (换行)if(buf == 0x0a)// 如果 0x0a 和 0x0d 都收到,则将 bit15 位置为1UART1_RX_STA |= 0x8000;else// 否则认为接收错误,重新开始UART1_RX_STA = 0;}else	// 如果没有收到了 0x0d (回车){//则先判断收到的这个字符是否是 0x0d (回车)if(buf == 0x0d){// 是的话则将 bit14 位置为1UART1_RX_STA |= 0x4000;}else{// 否则将接收到的数据保存在缓存数组里UART1_RX_Buffer[UART1_RX_STA & 0X3FFF] = buf;UART1_RX_STA++;// 如果接收数据大于UART1_REC_LEN(200字节),则重新开始接收if(UART1_RX_STA > UART1_REC_LEN - 1)UART1_RX_STA = 0;}}}// 重新开启中断HAL_UART_Receive_IT(&huart1, &buf, 1);}
}/* USER CODE END 0 *//*** @brief  The application entry point.* @retval int*/
int main(void)
{/* USER CODE BEGIN 1 *//* USER CODE END 1 *//* MCU Configuration--------------------------------------------------------*//* Reset of all peripherals, Initializes the Flash interface and the Systick. */HAL_Init();/* USER CODE BEGIN Init *//* USER CODE END Init *//* Configure the system clock */SystemClock_Config();/* USER CODE BEGIN SysInit *//* USER CODE END SysInit *//* Initialize all configured peripherals */MX_GPIO_Init();MX_USART1_UART_Init();/* USER CODE BEGIN 2 */// 开启接收中断HAL_UART_Receive_IT(&huart1, &buf, 1);/* USER CODE END 2 *//* Infinite loop *//* USER CODE BEGIN WHILE */while (1){/* USER CODE END WHILE *//* USER CODE BEGIN 3 *///判断串口是否接收完成if(UART1_RX_STA & 0x8000){printf("收到数据:");if(strcmp((const char *)UART1_RX_Buffer, "open") == 0){				// 判断是否是open指令HAL_GPIO_WritePin(GPIOB, GPIO_PIN_8, GPIO_PIN_RESET);if(HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_8) == GPIO_PIN_RESET){HAL_UART_Transmit(&huart1, (uint8_t *)"LED已经打开\r\n", strlen("LED已经打开\r\n"), 100);	// 返回结果给APP}}else if(strcmp((const char *)UART1_RX_Buffer, "close") == 0){		// 判断是否是close指令HAL_GPIO_WritePin(GPIOB, GPIO_PIN_8, GPIO_PIN_SET);if(HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_8) == GPIO_PIN_SET){HAL_UART_Transmit(&huart1, (uint8_t *)"LED已经关闭\r\n", strlen("LED已经关闭\r\n"), 100);	// 返回结果给APP}}else{if(UART1_RX_Buffer[0] != '\0'){									// 判断是否是无效指令HAL_UART_Transmit(&huart1, (uint8_t *)"指令发送错误\r\n", strlen("指令发送错误\r\n"), 100);}}printf("\r\n");memset(UART1_RX_Buffer, '\0', sizeof(UART1_RX_Buffer));// 重新开始下一次接收UART1_RX_STA = 0;}HAL_Delay(50);}/* USER CODE END 3 */
}

然后我们把代码编译并烧录进去就实现了我们的小项目:

在这里插入图片描述

在这里插入图片描述

http://www.dtcms.com/wzjs/477492.html

相关文章:

  • 响应式网站的开发网络销售平台排名前十
  • 网站建设公司联系方式群排名优化软件官网
  • 设计网站推荐提升审美中国免费域名注册平台
  • 东莞 外贸网站设计常用的网络营销工具有哪些
  • 十堰网站建设多少钱太原网站推广公司
  • 外贸网站响应式中国的网络营销公司
  • 网页设计说明万能模板在线seo短视频
  • php网站漂浮广告代码百度新闻发布平台
  • 合肥网站制作建设无锡谷歌推广
  • 公司怎么开网站搜索引擎链接
  • 做的网站打不开工业和信息化部
  • 浙江中联建设集团网站东莞百度网站排名优化
  • 昭通市公安局网站是谁做的模板网站好还是自助建站好
  • 河南郑州暴雨伤亡惠州seo代理计费
  • 网站建设经费预算互联网广告公司排名前十
  • 建设类招标代理公司网站陕西seo关键词优化外包
  • 世界500强企业市值排名站长工具seo词语排名
  • 电脑自带的做网站叫什么软件网站一般需要怎么推广
  • 视频网站做压力测试沈阳seo顾问
  • 查找网站开发者成都网站制作费用
  • 多php网站建设新网络营销
  • 秦皇岛网站制作公司seo策略
  • 专业设计app北京seo排名收费
  • 餐饮网站建设思路网站优化技巧
  • 新加坡网站建设公司行业网站
  • 贵州城乡建设部网站首页站内优化主要从哪些方面进行
  • 淮南网站建设郴州网站定制
  • 南昌媒体网站建设口碑推荐今天刚刚最新消息2023
  • 网站服务器崩溃seo工具是什么意思
  • 毕业设计软件开发网站开发百度浏览器网址