首页 > 其他分享 >STM32蓝牙插座项目(hal)

STM32蓝牙插座项目(hal)

时间:2024-10-23 16:16:19浏览次数:3  
标签:HAL handle UART rx STM32 Init 插座 hal uart2

这是一个非常简单的蓝牙小项目

项目要求,能够在手机上发送开启闸门时,继电器相应的打开,在手机上发送关闭闸门时,继电器相应关闭,且在开始时,发送“hello,帅气的雷先生”

使用PIN脚:

蓝牙:

RX2TXD
TX2RXD
GNDGND
5V5V

继电器:

PB6IN
GNDGND
3.3VVCC

 代码实现:
1、串口蓝牙通信

我们这里的蓝牙使用到了单片机上的串口2,所以我们要初始化串口2

void bt_init(uint32_t baudrate)
{
    /*uart2 初始化设置*/
    uart2_handle.Instance = USART2;                                         /* USART1 */
    uart2_handle.Init.BaudRate = baudrate;                                  /* 波特率 */
    uart2_handle.Init.WordLength = UART_WORDLENGTH_8B;                      /* 字长为8位数据格式 */
    uart2_handle.Init.StopBits = UART_STOPBITS_1;                           /* 一个停止位 */
    uart2_handle.Init.Parity = UART_PARITY_NONE;                            /* 无奇偶校验位 */
    uart2_handle.Init.HwFlowCtl = UART_HWCONTROL_NONE;                      /* 无硬件流控 */
    uart2_handle.Init.Mode = UART_MODE_TX_RX;                               /* 收发模式 */
    HAL_UART_Init(&uart2_handle);                                           /* HAL_UART_Init()会使能UART1 */
}

 串口2的中断服务函数

void USART2_IRQHandler(void)
{
    uint8_t receive_data = 0;   
    if(__HAL_UART_GET_FLAG(&uart2_handle, UART_FLAG_RXNE) != RESET){        /* 获取接收RXNE标志位是否被置位 */
        if(uart2_rx_len >= sizeof(uart2_rx_buf))                            /* 如果接收的字符数大于接收缓冲区大小, */
            uart2_rx_len = 0;                                               /* 则将接收计数器清零 */
        HAL_UART_Receive(&uart2_handle, &receive_data, 1, 1000);            /* 接收一个字符 */
        uart2_rx_buf[uart2_rx_len++] = receive_data;                        /* 将接收到的字符保存在接收缓冲区 */
    }

    if (__HAL_UART_GET_FLAG(&uart2_handle, UART_FLAG_IDLE) != RESET)        /* 获取接收空闲中断标志位是否被置位 */
    {
        printf("btrecv: %s\r\n", uart2_rx_buf);                               /* 将接收到的数据打印出来 */
        if(strstr((char *)uart2_rx_buf,"开启闸门") != NULL)
        {
            plug_on();
        }
        else if(strstr((char *)uart2_rx_buf,"关闭闸门") != NULL)
        {
            plug_off();
        }
        uart2_rx_clear();
        __HAL_UART_CLEAR_IDLEFLAG(&uart2_handle);                           /* 清除UART总线空闲中断 */
    }
}

 发送数据函数

void bt_send(char *format, ...)
{
    uint8_t send_buf[128] = {0};
    va_list arg;
    va_start(arg,format);
    vsprintf((char *)send_buf,format,arg);
    va_end(arg);
    HAL_UART_Transmit(&uart2_handle,send_buf,sizeof(send_buf),100);
    
    
}

2、继电器初始化

void plug_init(void)
{
    GPIO_InitTypeDef gpio_initstruct;
    //打开时钟
    __HAL_RCC_GPIOB_CLK_ENABLE();                           // 使能GPIOB时钟
    
    //调用GPIO初始化函数
    gpio_initstruct.Pin = GPIO_PIN_6;          
    gpio_initstruct.Mode = GPIO_MODE_OUTPUT_PP;             // 推挽输出
    gpio_initstruct.Pull = GPIO_PULLUP;                     // 上拉
    gpio_initstruct.Speed = GPIO_SPEED_FREQ_HIGH;           // 高速
    HAL_GPIO_Init(GPIOB, &gpio_initstruct);
 
    plug_off();
}

3、主函数

int main(void)
{
    HAL_Init();                         /* 初始化HAL库 */
    stm32_clock_init(RCC_PLL_MUL9);     /* 设置时钟, 72Mhz */
    led_init();                         /* 初始化LED灯 */
    uart1_init(115200);
    printf("hello world!\r\n");
    bt_init(115200);
    plug_init();
    bt_send("hello,帅气的雷先生\r\n");

4、实现效果

当在手机蓝牙助手上发送“开启闸门”时,继电器开启,相应的,继电器上的绿色灯亮起。同理,在手机蓝牙助手上发送“关闭闸门”时,继电器关闭,绿灯灭掉。这样我们就实现了初步的手机通过蓝牙控制单片机的过程。

标签:HAL,handle,UART,rx,STM32,Init,插座,hal,uart2
From: https://blog.csdn.net/ljhlovezyx/article/details/143187164

相关文章

  • STM32 第16章STM32中断应用概览
    时间:2024.10.23一、学习内容1.异常类型1.1中断简介STM32中断非常强大,每个外设都可以产生中断,因此中断是一个公共的部分。在本章讨论中,如无特别说明,异常就是中断,中断就是异常。1.2中断类型系统异常,体现在内核水平(Cortex-M3)外部中断,体现在外设水平有关系统异常和中断的......
  • STM32第15章 RCC-使用HSE/HSI配置时钟
    时间:2024.10.21-10.23参考资料:《零死角玩转STM32》“RCC-使用HSE/HIS配置时钟”章节TIPS:从前面的历程中我们知道,程序在启动的时候会执行汇编文件,汇编文件里会调用System_Init(固件库编程的函数),它里面会把时钟初始化成72M,因此前面我们在用固件库写程序的时候,有关时钟这一部......
  • FFC/FPC插座的类型有几种,一般型号命名方式是怎样的
    FPC/FFC插座间距分别有0.3mm,0.5mm,0.8mm,1.0mm,1.25mm,2.54mm。 规格包含:翻盖式,上接式,下接式,抽拉式,立式,双面接触,单面接触,卧式。触角分别有:180°直插型,90°折弯型,SMT贴片型。    FPC连接器,即柔性印刷电路板连接器,是一种用于连接柔性电路板和PCB板的电子元件。以......
  • STM32F407 HAL库:双DAC的信号发生器+双ADC采集
    文章目录概要CubeMX配置代码细节1.串口发送:串口重定向:调用HAL库函数:2.串口接收:3.DAC+DMA提前写入的数据:函数生成数据:DAC+DMA程序中调用:4.ADC+DMAADC转换标志位:ADC的使用:5.FFT操作总结概要使用F407内部的DAC由定时器触发并加上DMA操作实现如正弦波、方......
  • 在STM32CubeMX中配置 PWM
    一、基本配置 首先来基本的配置1.将debug 改为  模拟输出2.在RCC中选择内部晶振(有需要也可以选外部晶振)3.开始配置引脚4.配置时钟树(省略)这里我设置72HZ 5.最后的收尾设置(前面一期有讲) 正式开始PWM的配置 1、PWM的设置需要定时器的时钟来控制频率(具......
  • HL7协议简介及其在STM32上的解析实现
            近期完成一个医疗相关的项目,其中包括了体征监测设备,该设备使用的通信协议便是HL7V2.4协议,在医疗信息化领域,HL7(HealthLevelSeven)协议扮演着至关重要的角色。它是一种国际标准,用于定义医疗机构间以及医疗设备与信息系统之间的数据交换格式和通信协议。HL7标......
  • 项目-STM32F765VIT6+W5500 使用单片机串口发送命令实现OTA远程升级单片机程序测试说明
       测试1,单片机通过SPI1和模块通信; 单片机PA8引脚作为复位模组使用;串口1做日志打印(115200); 2,打开例程 3,使用下载器先下载BootLoader,然后再下载用户程序   4,在网站的根目录建几个文件夹  目录要和mcu_project程序里面的目录一致 ......
  • STM32外设应用技术博文:基于UART的温度传感器数据采集
    ✅作者简介:2022年博客新星第八。热爱国学的Java后端开发者,修心和技术同步精进。......
  • 红外对射传感器计次(江科大stm32学习笔记)
    本篇文章主要完成红外对射传感器计次的案例,为江科大stm32学习后的笔记记录。硬件方面如图所示为本次使用的红外对射传感器,根据相关说明书可知:模块槽中无遮挡时,接收管导通,模块DO输出低电平,遮挡时,DO输出高电平;且有输出状态指示灯,输出高电平灯灭,输出低电平灯亮。如图所示,①......
  • 光敏电阻控制蜂鸣器(江科大stm32学习笔记)
    首先,选择模块化编程,使代码结构更加的清晰,整洁,便于更改。此处需要对蜂鸣器部分,光敏电阻传感器部分进行模块化编程。电路原理图对蜂鸣器以及光敏电阻传感器的电路原理图进行介绍。如图所示为蜂鸣器的电路原理图:采用三级管进行驱动,当PNP的基级引脚接低电平时,蜂鸣器启动,高电平......