国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

關(guān)于兩個(gè)STM32F103系列單片機(jī)的藍(lán)牙通信

這篇具有很好參考價(jià)值的文章主要介紹了關(guān)于兩個(gè)STM32F103系列單片機(jī)的藍(lán)牙通信。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

? ?畢設(shè)做的是掌控小車,因此采用藍(lán)牙通信作為小車和手部通信,前段時(shí)間做出實(shí)物,對其遇到的問題以及解決的方法做一些總結(jié)。一個(gè)主控芯片采用STM32F103ZET6,另一個(gè)主控芯片采用STM32F103C8T6,原因是本來準(zhǔn)備了兩個(gè)主控C8T6,不小心燒了一個(gè)。

1.兩個(gè)藍(lán)牙的配對

兩個(gè)stm32藍(lán)牙通信,單片機(jī),stm32,嵌入式硬件

?需要準(zhǔn)備的硬件:

2個(gè)HC-05主從一體,2個(gè)USB轉(zhuǎn)TTL,杜邦線若干,USB拓展口(電腦USB口較少的)

AT指令集(在藍(lán)牙模塊進(jìn)入AT指令模式后,需要在串口助手上發(fā)送AT指令):

對于HC-05這款藍(lán)牙模塊,其上有一個(gè)黑色的小按鈕,在通電之前長按,插入電腦USB口后,原本快閃紅燈變?yōu)槁W后,即進(jìn)入AT模式,此時(shí)可以在串口助手上發(fā)送AT指令。每發(fā)送一條AT指令后,串口助手會回饋一個(gè)OK或者其他,證明可以正常使用,若不能回復(fù)OK,大概有以下問題:

(1)檢查連線,是否RXD連接的TXD,是否杜邦線連接正確。

(2)檢查波特率是否正確,默認(rèn)的波特率是38400

以下為兩個(gè)藍(lán)牙模塊配對的過程:

?1.初始化藍(lán)牙模塊(需要開啟兩個(gè)串口助手對主從機(jī)進(jìn)行配置,此處A為主機(jī),B為從機(jī))
藍(lán)牙模塊A的配置
AT+ORGL ? ? ? ?

初始化藍(lán)牙模塊(當(dāng)使用了此條AT指令后,自動退出AT模式,需重新進(jìn)入AT模式)
AT+PSWD="xxxx" ?

設(shè)置藍(lán)牙配對密碼(其中xxxx代表任意數(shù)字,主機(jī)從機(jī)的密碼要一致)
AT+ROLE=1 ? ? ?

設(shè)置藍(lán)牙模塊A為主機(jī) (1代表主機(jī),0代表從機(jī))


藍(lán)牙模塊B的配置
AT+ORGL ? ? ? ?

初始化藍(lán)牙模塊(當(dāng)使用了此條AT指令后,自動退出AT模式,需重新進(jìn)入AT模式)
AT+PSWD="xxxx" ?

設(shè)置藍(lán)牙配對密碼(其中xxxx代表任意數(shù)字,主機(jī)從機(jī)的密碼要一致)
AT+ROLE=0 ? ? ?

設(shè)置藍(lán)牙模塊A為主機(jī) (1代表主機(jī),0代表從機(jī))
2.查詢從機(jī)地址并綁定
AT+ADDR? ? ? ?

對從機(jī)進(jìn)行地址查詢,獲得查詢地址,我使用從機(jī)獲得的的地址0022:12:0205FC
將獲得的地址其中的冒號換成逗號即0022,12,0205FC
注意:在AT指令中所有的標(biāo)點(diǎn)均為英文輸入法下的
AT+BIND=0022,12,0205FC

?
在主機(jī)的串口助手窗口發(fā)送,使主機(jī)綁定從機(jī)地址
AT+BIND? ? ? ? ?

查看主機(jī)是否成功綁定從機(jī)地址
3.設(shè)置主機(jī)從機(jī)的波特率
AT+UART=115200,0,0 ? ?

設(shè)置主機(jī)的波特率為115200
AT+UART??? ??? ? ? ?

查詢主機(jī)波特率是否為115200
AT+UART=115200,0,0 ? ?

設(shè)置從機(jī)的波特率為115200
AT+UART??? ??? ? ? ?

查詢從機(jī)波特率是否為115200

配置完成后,拔出再重新通電,此時(shí)不用按住黑色小按鈕,待兩個(gè)藍(lán)牙模塊的紅燈均變?yōu)槁W時(shí),即配對成功,此時(shí)在主機(jī)的串口助手上發(fā)送數(shù)字,在從機(jī)的串口助手上可以接收到,即實(shí)現(xiàn)了兩個(gè)藍(lán)牙模塊的通信。

2.單片機(jī)的配置(僅為部分配置代碼)

? 根據(jù)上述兩個(gè)藍(lán)牙之間的通信,不難推斷藍(lán)牙通信就是無線的串口通信,STM32單片機(jī)配置時(shí)應(yīng)注意配置兩個(gè)單片機(jī)的串口,要有和藍(lán)牙相同的波特率,同時(shí)將藍(lán)牙連接至配置好的單片機(jī)所用的串口(RXD,TXD)上

我在小車上的串口配置,使用串口3

#include "usart3.h"
#include "sys.h"
#include "usart.h"
#include "tb6612.h"
#include "timer.h"


uint8_t Serial_RxFlag;
extern int USART3_Flag;
uint16_t R_Data;

void usart3_init(u32 bound)
{ 
	  GPIO_InitTypeDef GPIO_InitStructure;
	  NVIC_InitTypeDef NVIC_InitStructurea;
	  USART_InitTypeDef USART_InitStruct;
	 
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3,ENABLE);//
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE); //
	  USART_DeInit(USART3);//
	
	  GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;
	  GPIO_InitStructure.GPIO_Pin=GPIO_Pin_10;
	  GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
	  GPIO_Init(GPIOB,&GPIO_InitStructure);    //PB10
	
	  GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;
	  GPIO_InitStructure.GPIO_Pin=GPIO_Pin_11;
	  GPIO_Init(GPIOB,&GPIO_InitStructure);  //PB11	 
  
	  NVIC_InitStructurea.NVIC_IRQChannel=USART3_IRQn;
	  NVIC_InitStructurea.NVIC_IRQChannelCmd=ENABLE;
	  NVIC_InitStructurea.NVIC_IRQChannelPreemptionPriority=1;
	  NVIC_InitStructurea.NVIC_IRQChannelSubPriority=1;
	  NVIC_Init(&NVIC_InitStructurea);          //
		
		USART_ITConfig(USART3,USART_IT_RXNE,ENABLE);//
	
	  USART_InitStruct.USART_BaudRate=bound;//
		USART_InitStruct.USART_HardwareFlowControl=USART_HardwareFlowControl_None;//
		USART_InitStruct.USART_Mode=USART_Mode_Rx|USART_Mode_Tx;//
		USART_InitStruct.USART_Parity=USART_Parity_No;//
		USART_InitStruct.USART_StopBits=USART_StopBits_1;//
		USART_InitStruct.USART_WordLength=USART_WordLength_8b;//
	  USART_Init(USART3,&USART_InitStruct);                 //
		
		USART_Cmd(USART3,ENABLE);//
	

}
void USART3_IRQHandler(void)
{

	if (USART_GetITStatus(USART3, USART_IT_RXNE) == 1)
	{
		R_Data = USART_ReceiveData(USART3);//?aDD±íê?ê?μ?μ?êy?Y
		
		if(R_Data=='A') USART3_Flag=1;
		if(R_Data=='B') USART3_Flag=2;
		if(R_Data=='C') USART3_Flag=3;
		if(R_Data=='D') USART3_Flag=4;
		if(R_Data=='E') USART3_Flag=5;
		USART_ClearITPendingBit(USART3, USART_IT_RXNE);
	}
}


可以參考一個(gè)老哥的https://blog.csdn.net/hbzdsXCV/article/details/129278918?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522168240123616800186542106%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=168240123616800186542106&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_ecpm_v1~rank_v31_ecpm-5-129278918-null-null.142^v86^wechat,239^v2^insert_chatgpt&utm_term=%E4%B8%A4%E4%B8%AA%E5%8D%95%E7%89%87%E6%9C%BA%E7%9A%84%E8%93%9D%E7%89%99%E9%80%9A%E4%BF%A1&spm=1018.2226.3001.4187

手部采集部分,使用串口2

#include "usart2.h"


u8  USART2_RX_BUF[USART2_REC_LEN]; //?óê??o3?,×?′óUSART_REC_LEN??×??ú.??×??ú?a??DD·? 
u16 USART2_RX_STA;         		//?óê?×′ì?±ê??	

void uart2_Init(u32 baudrate)
{
    GPIO_InitTypeDef GPIO_InitStructure;
    USART_InitTypeDef USART_InitStructure;
    NVIC_InitTypeDef NVIC_InitStructure;
    
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE);
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);	//ê1?üUSART2£?GPIOAê±?ó

    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2; //PA.2
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;	//?′ó?í?íìê?3?
    GPIO_Init(GPIOA, &GPIO_InitStructure);//3?ê??ˉGPIOA.2

    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;//PA3
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//????ê?è?
    GPIO_Init(GPIOA, &GPIO_InitStructure);//3?ê??ˉGPIOA.3  

    //Usart1 NVIC ????
    NVIC_InitStructure.NVIC_IRQChannel = USART2_IRQn;
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=1 ;//?à??ó??è??3
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;		//×óó??è??3
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;			//IRQí¨μàê1?ü
    NVIC_Init(&NVIC_InitStructure);	//?ù?Y???¨μ?2?êy3?ê??ˉVIC??′??÷

    //USART 3?ê??ˉéè??

    USART_InitStructure.USART_BaudRate = baudrate;//′??ú2¨ì??ê
    USART_InitStructure.USART_WordLength = USART_WordLength_8b;//×?3¤?a8??êy?Y??ê?
    USART_InitStructure.USART_StopBits = USART_StopBits_1;//ò???í£?1??
    USART_InitStructure.USART_Parity = USART_Parity_No;//?T????D£?é??
    USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//?Tó2?têy?Yá÷????
    USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;	//ê?·¢?£ê?

    USART_Init(USART2, &USART_InitStructure); //3?ê??ˉ′??ú2
    USART_ITConfig(USART2, USART_IT_RXNE, ENABLE);//?a??′??ú?óêü?D??
    USART_Cmd(USART2, ENABLE);                    //ê1?ü′??ú2
}

void USART2_IRQHandler(void)                	//′??ú2?D??·t??3ìDò
{
	u8 Res;

    if(USART_GetITStatus(USART2, USART_IT_RXNE) != RESET)  //?óê??D??(?óê?μ?μ?êy?Y±?D?ê?0x0d 0x0a?á?2)
    {
        Res =USART_ReceiveData(USART2);	//?áè??óê?μ?μ?êy?Y

        if((USART2_RX_STA&0x8000)==0)//?óê??′íê3é
        {
            if(USART2_RX_STA&0x4000)//?óê?μ?á?0x0d
            {
                if(Res!=0x0a)USART2_RX_STA=0;//?óê?′í?ó,??D??aê?
                else USART2_RX_STA|=0x8000;	//?óê?íê3éá? 
            }
            else //?1??ê?μ?0X0D
            {	
                if(Res==0x0d)USART2_RX_STA|=0x4000;
                else
                {
                    USART2_RX_BUF[USART2_RX_STA&0X3FFF]=Res ;
                    USART2_RX_STA++;
                    if(USART2_RX_STA>(USART2_REC_LEN-1))USART2_RX_STA=0;//?óê?êy?Y′í?ó,??D??aê??óê?	  
                }		 
            }
        }   		 
    } 

} 
static u8 USART2_TX_BUF[200];

void u2_printf(char* fmt,...)  
{     
	u16 i,j; 
	va_list ap; 
	va_start(ap,fmt);
	vsprintf((char*)USART2_TX_BUF,fmt,ap);
	va_end(ap);
	i=strlen((const char*)USART2_TX_BUF);		//′?′?·¢?íêy?Yμ?3¤?è
	for(j=0;j<i;j++)							//?-?··¢?íêy?Y
	{
		while((USART2->SR&0X40)==0);			//?-?··¢?í,?±μ?·¢?ííê±?   
		USART2->DR=USART2_TX_BUF[j];  
	} 
}

3.實(shí)現(xiàn)兩個(gè)藍(lán)牙的通信

在配置好兩個(gè)單片機(jī)的串口之后,其實(shí)關(guān)于藍(lán)牙通信就已經(jīng)解決的差不多了,最后剩下的關(guān)鍵只有串口發(fā)送函數(shù)和串口接收函數(shù)的使用,在主機(jī)使用串口發(fā)送函數(shù),在從機(jī)使用串口接收函數(shù),注意串口發(fā)送和接收的串口。

4.遇到的問題及解決方案

開始由于好久沒搗鼓過32了,而且我這個(gè)電腦ST-LINK一直沒有調(diào)過來,因此后來改成用串口燒錄,對于c8t6的串口燒錄(使用TTL轉(zhuǎn)USB燒錄),燒錄時(shí)應(yīng)用跳線帽將BOOT0置1,待燒錄完成后將BOOT0置0,才可正常工作,而期間BOOT1一直置0。

5.完整版代碼

鏈接:https://pan.baidu.com/s/1Nar8uLibDYbWvmrfeW7pBg?pwd=rx1l?
提取碼:rx1l

這是本人第一次在CSDN上發(fā)表文章,本人才學(xué)疏淺,寫下此文也是希望能幫到別人,謝謝。文章來源地址http://www.zghlxwxcb.cn/news/detail-546510.html

到了這里,關(guān)于關(guān)于兩個(gè)STM32F103系列單片機(jī)的藍(lán)牙通信的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【單片機(jī)】STM32單片機(jī),定時(shí)器的輸入捕獲,基于捕獲的頻率計(jì),STM32F103

    【單片機(jī)】STM32單片機(jī),定時(shí)器的輸入捕獲,基于捕獲的頻率計(jì),STM32F103

    下面的定時(shí)器都具有輸入捕獲能力: 查看另一篇文章:https://qq742971636.blog.csdn.net/article/details/131471539 外部計(jì)數(shù)頻率計(jì)的缺點(diǎn):需要兩個(gè)定時(shí)器配合,最高能測量的頻率是否有限制我沒具體嘗試。 基于捕獲的頻率計(jì)的缺點(diǎn):最高能測量的頻率有限制。 TIM3_CH1 PWM PA6 10KHZ。 輸入

    2024年02月14日
    瀏覽(26)
  • (STM32F103單片機(jī))DHT11溫濕度傳感器

    (STM32F103單片機(jī))DHT11溫濕度傳感器

    目錄 ? 一,產(chǎn)品介紹 二,產(chǎn)品亮點(diǎn) 三,產(chǎn)品參數(shù) 四,引腳連接及通信說明 ?五,原理講解 六,源碼 1,DHR11.C 2.DHR11.H 3,main.c DHT11數(shù)字溫濕度傳感器是一款含有已校準(zhǔn)數(shù)字信號輸出的溫濕度復(fù)合傳感器。它應(yīng)用專用的數(shù)字模塊采集技術(shù)和溫濕度傳感技術(shù),確保產(chǎn)品具有極高

    2023年04月08日
    瀏覽(28)
  • STM32F103單片機(jī)控制繼電器開關(guān)小風(fēng)扇和加熱片

    STM32F103單片機(jī)控制繼電器開關(guān)小風(fēng)扇和加熱片

    ? ?在智能衣柜中,使用異味傳感器檢測柜內(nèi)異味值,當(dāng)異味值大于設(shè)定值時(shí)會自動開啟小風(fēng)扇,小風(fēng)扇起到一個(gè)排污去濁的功能,再加上溫濕度傳感器檢測柜內(nèi)的溫度和濕度,當(dāng)溫濕度達(dá)到設(shè)定值時(shí),加熱片自動發(fā)熱,起到一個(gè)降溫除霉的作用。想要使小風(fēng)扇和加熱片自動

    2024年02月02日
    瀏覽(45)
  • 【單片機(jī)】STM32F103C8T6 最小系統(tǒng)板原理圖

    【單片機(jī)】STM32F103C8T6 最小系統(tǒng)板原理圖

    STM32F103C8T6是一款基于ARM Cortex-M3內(nèi)核的32位微控制器,由STMicroelectronics(ST)公司生產(chǎn)。它是STMicroelectronics的STM32系列微控制器中的一員,被廣泛應(yīng)用于嵌入式系統(tǒng)和電子設(shè)備中。 STM32F103C8T6單片機(jī)的主要特點(diǎn)和資源包括: 內(nèi)存資源: Flash存儲器:64 KB SRAM(靜態(tài)隨機(jī)訪問存儲器

    2024年02月12日
    瀏覽(30)
  • 【單片機(jī)】STM32單片機(jī),RTC實(shí)時(shí)時(shí)鐘,STM32F103C8T6,程序,萬年歷,數(shù)字時(shí)鐘

    【單片機(jī)】STM32單片機(jī),RTC實(shí)時(shí)時(shí)鐘,STM32F103C8T6,程序,萬年歷,數(shù)字時(shí)鐘

    我以STM32F103C8T6為例,但STM32F103的RTC是通用的,STM32F103C8T6有一個(gè)原理圖: https://qq742971636.blog.csdn.net/article/details/131288390 用紐扣電池給VBAT供電(要共地),即可實(shí)現(xiàn)掉電后依舊走時(shí)的能力。 主要特性(來源于STM32中文參考手冊V10.pdf): 記得加標(biāo)準(zhǔn)庫文件: 串口接收:

    2024年02月11日
    瀏覽(32)
  • 【單片機(jī)】STM32單片機(jī)頻率計(jì)程序,外部脈沖計(jì)數(shù)程序,基于脈沖計(jì)數(shù)的頻率計(jì)程序,STM32F103

    【單片機(jī)】STM32單片機(jī)頻率計(jì)程序,外部脈沖計(jì)數(shù)程序,基于脈沖計(jì)數(shù)的頻率計(jì)程序,STM32F103

    兩種方法用于在單片機(jī)中實(shí)現(xiàn)頻率計(jì)的功能。 第一種方法是通過定時(shí)器來衡量信號的周期,然后將周期轉(zhuǎn)換為頻率。在這種方法中,你可以使用單片機(jī)的定時(shí)器模塊來測量輸入信號的周期,定時(shí)器會產(chǎn)生一個(gè)計(jì)數(shù)值,你可以根據(jù)這個(gè)計(jì)數(shù)值來推算出輸入信號的周期,并通過簡

    2024年02月11日
    瀏覽(25)
  • stm32F103單片機(jī)pwm控制伺服驅(qū)動器進(jìn)而控制步進(jìn)電機(jī)

    stm32F103單片機(jī)pwm控制伺服驅(qū)動器進(jìn)而控制步進(jìn)電機(jī)

    1.需要一臺步進(jìn)電機(jī),私服驅(qū)動器,stm32單片機(jī);先按照說明文檔,連接好硬件相關(guān)線路,對應(yīng)好sign+,sign-,puls+,puls-線路,其中sign只是個(gè)io口拉高拉低操作,puls是pwm波形輸出口,雖然有兩根線,但只是需要控制一個(gè)IO口輸出波形即可; 采用主從模式,TIM1為主定時(shí)器,tim3未從定

    2024年02月04日
    瀏覽(22)
  • STM32F103ZET6 封裝 LQFP-144 ST意法 單片機(jī)芯片

    STM32F103ZET6 封裝 LQFP-144 ST意法 單片機(jī)芯片

    STM32F103ZET6 是意法半導(dǎo)體(STMicroelectronics)生產(chǎn)的一款基于 ARM Cortex-M3 內(nèi)核的 32 位微控制器。它具有高性能、低功耗的特點(diǎn),廣泛應(yīng)用于各種嵌入式系統(tǒng)和工業(yè)應(yīng)用中。STM32F103ZET6 的主要特點(diǎn)如下: 內(nèi)核:ARM Cortex-M3,工作頻率最高可達(dá) 72MHz。 存儲器:64KB SRAM,512KB FLASH。 外

    2024年04月22日
    瀏覽(27)
  • STM32F103RCT6開發(fā)板M3單片機(jī)教程06--定時(shí)器中斷

    STM32F103RCT6開發(fā)板M3單片機(jī)教程06--定時(shí)器中斷

    除非特別說明,本章節(jié)描述的模塊應(yīng)用于整個(gè) STM32F103xx 微控制器系列,因?yàn)槲覀兪褂檬?STM32F103RCT6開發(fā)板是mini最小系統(tǒng)板。 本教程使用是( 光明谷SUN_STM32mini開發(fā)板 ) ? 首先了解一下是STM32F10X定時(shí)器(Timer) ? 注: 小容量產(chǎn)品是指閃存存儲器容量在16K至32K字節(jié)之間的STM32F101

    2024年02月04日
    瀏覽(99)
  • 【單片機(jī)】STM32單片機(jī),定時(shí)器,多路PWM,TIM1、TIM2、TIM3、TIM4,STM32F103

    【單片機(jī)】STM32單片機(jī),定時(shí)器,多路PWM,TIM1、TIM2、TIM3、TIM4,STM32F103

    下圖是定時(shí)器相關(guān)引腳: 在《STM32中文參考手冊V10.pdf》有寫: TIM1 的PWM是帶互補(bǔ)輸出的,較為高級和復(fù)雜,有興趣可以參考其他介紹文章,這里的代碼讓7個(gè)引腳輸出PWM。 調(diào)用: 這里沒有重映射,注意不能把PA9 PA10 初始化成串口去了。 timer.c timer.h 調(diào)用: 這里沒有重映射。

    2024年02月11日
    瀏覽(26)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包