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

做门户网站代码质量方面具体需要注意什么常州百度搜索优化

做门户网站代码质量方面具体需要注意什么,常州百度搜索优化,深圳做微信网站多少钱,佛山网站制作哪里好基于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/461467.html

相关文章:

  • 网网站设计三只松鼠营销案例分析
  • 南阳市宛城区建设局网站应用商店aso优化
  • 网站开发需要什么天津百度seo
  • 电脑十大免费游戏网站seo技术快速网站排名
  • 南京手机网站制作公司竞价推广代运营企业
  • 赌博真人网站是怎么做的seo百度关键词优化软件
  • 现在可以做网站么爱网站关键词挖掘
  • 千图网网站怎么做百度seo学院
  • 俄语网站制作免费发布广告的网站
  • 建一个c2c网站要多少钱哪些网站有友情链接
  • 大连网站设计收费标准seo黑帽是什么
  • 机器配件做外贸上什么网站百度推广工作怎么样
  • 网站建设合同注意点网站怎么优化搜索
  • 北海网站开发北京疫情最新数据
  • 武汉建设信息网站官网百度网址安全检测
  • wordpress for sae4.5梁水才seo优化专家
  • 河北做网站的itmc平台seo优化关键词个数
  • 学校网站建设 效果app拉新佣金排行榜
  • 东莞市专注网站建设公司网站排名top排行榜
  • 做电影网站需要的服务器配置网上推广产品哪个网好
  • 网络规划设计师2022真题郑州seo外包顾问
  • ag亚游平台网站开发百度快照入口官网
  • 沈阳网站制作找网势科技淘宝定向推广
  • 企业网站免费推广软件搜索引擎优化的核心本质
  • 有哪些网站可以学做糕点的注册推广赚钱一个10元
  • 免费行情软件网站有哪些网站推广专家十年乐云seo
  • form e哪个网站做推广资源seo
  • 网站备案协议书seo网站关键词优化怎么做
  • 万能本地视频播放器金昌网站seo
  • 鹿邑网站建设房地产销售工作内容