基于stm32的蓝牙模块实验
蓝牙模块定长或不定长发送
头文件
#include "stdio.h"
#include "sys.h"#define UART2_RX_BUF_SIZE 128
#define UART2_TX_BUF_SIZE 64UART_HandleTypeDef uart2_handle;uint8_t uart2_rx_buf[UART2_RX_BUF_SIZE];
uint16_t uart2_rx_len = 0;
void bt_init(uint32_t bound); /* 串口初始化函数 */
//void bt_send(char *send_buf,uint8_t size);
void bt_send(char * format,...);
1串口1初始化函数
baudrate: 波特率, 根据自己需要设置波特率值
void bt_init(uint32_t baudrate)
{ uart2_handle.Instance = USART2; /*USART2*/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);}
2uart2接收缓冲区清除
void uart2_rx_clear(void)
{memset(uart2_rx_buf,0,sizeof(uart2_rx_buf));uart2_rx_len = 0;
}
3串口1中断服务函数
串口1中断服务函数
在此使用接收中断及空闲中断,实现不定长数据收发
void USART2_IRQHandler(void)
{uint8_t receive_data = 0;/* 获取接收RXNE标志位是否被置位 */if(__HAL_UART_GET_FLAG(&uart2_handle, UART_FLAG_RXNE) != RESET) {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_F:AG_IDLE) != RESET){printf("bt:recv: %s\r\n", uart2_rx_buf); /* 将接收到的数据打印出来 */__HAL_UART_CLEAR_IDLEFLAG(&uart2_handle); /* 清除UART总线空闲中断 */
}
}
4通过蓝牙发送数据发送
1定长
void bt_send(char *send_buf,uint8_t size)
{HAL_UART_Transmit(&uart2_handle,(uint8_t *)send_buf,size,100);
}
2不定长传输
void bt_send(char * format...)
{uint8_t send_buf[128] = {0}; /*初始化发送的数组*/va_list arg; /*创建一个参数列表va_list*/va_start(arg,format); /*初始化一个va_list类型的变量*//*使用参数列表发送格式化输出到字符串*/va_sprintf((char *)send_buf,format,arg);va_end(arg); /*用于清理va_list变量,结束可变参数的处理*//*这个函数允许用户将数据从用户指定的缓冲区发送到UART*/HAL_UART_Transmit(&uart2_handle,send_buf,sizeof(send_buf),100);
}
main
#include "sys.h"
#include "delay.h"
#include "uart1.h"
#include "bluetooth.h"int main(void)
{HAL_Init();stm32_clock_init(RCC_PLL_MUL9);bt_init(9600);printf("helloWorld!\r\n");uint16_t i = 0;while(1){bt_send("hello, bt1%d\r\n",i++);delay_ms(500);}
}