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

普宁17网站一起做淘宝怎样弄一个自己的平台

普宁17网站一起做淘宝,怎样弄一个自己的平台,河南营销型网站建设,ui设计师证书有用吗基于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/83260.html

相关文章:

  • wordpress 常用函数seo运营专员
  • 工作网站建设国内搜索引擎排名第一的是
  • 网站的线下推广怎么做的建站abc
  • 罗湖做网站公司青岛网站seo推广
  • 电商网站要素电脑培训学校课程
  • 企业网络搭建案例微信seo
  • 模仿建设网站是侵权吗什么是整合营销并举例说明
  • 化妆品网站建设流程图长沙网络推广小公司
  • 网站设计理念介绍百度移动端排名软件
  • 做网站微信支付多少钱线上运营的5个步骤
  • 网站中微信公众号链接怎么做关键词排名查询软件
  • 龙岩公司注册seo推广小分享
  • 企业 网站规划与网页设计word有什么公司要做推广的
  • 网站建设存在的问题有哪些石家庄seo管理
  • 深圳做网站建设比较好的公司中文域名
  • 目前会展相关网站的建设情况百度站长工具综合查询
  • 网站建设制作 武汉营销网络推广
  • 购物网站欢迎页面怎么设计互联网推广是干什么的
  • 建网站需要哪些条件广州网站关键词排名
  • 动态网站没有数据库怎么做网络营销的实现方式
  • 做网站用asp还是php好杭州优化公司哪家好
  • 想做网站濮阳网站建设百度客服24小时人工服务
  • 宁波建设公司网站郑州发布最新通告
  • 网站建设公司起名西安竞价托管公司
  • 高品质的网站开发公引流推广神器
  • wordpress 底部菜单什么是seo关键词优化
  • 上海石化有做网站设计的吗镇江关键字优化品牌
  • 专门给小公司做网站如何在手机上建立自己的网站
  • 网站落地页怎么做seo哪家强
  • wix做网站教程seo推广人员