嵌入式單片機(jī)MSP430F149學(xué)習(xí)筆記(一)HC06藍(lán)牙模塊的使用

姓名:周唯 佑力;學(xué)號(hào):20011210136;學(xué)院:通信工程學(xué)院

原鏈接:https://blog.csdn.net/weixin_44323997/article/details/115802184?spm=1001.2014.3001.5501

【嵌牛導(dǎo)讀】如何使用msp430單片機(jī)的hc06藍(lán)牙模塊?

【嵌牛鼻子】單片機(jī)庸追、msp430慕爬、hc06藍(lán)牙模塊

【嵌牛提問】什么是msp430膀斋?什么是藍(lán)牙通信?

【嵌牛正文】

一获黔、msp430單片機(jī)的概念

MSP430系列單片機(jī)是美國德州儀器TI)1996年開始推向市場(chǎng)的一種16位超低功耗蚀苛、具有精簡(jiǎn)指令集(RISC)的混合信號(hào)處理器(Mixed Signal Processor)。

MSP430單片機(jī)稱之為混合信號(hào)處理器玷氏,是由于其針對(duì)實(shí)際應(yīng)用需求堵未,將多個(gè)不同功能的模擬電路、數(shù)字電路模塊和微處理器集成在一個(gè)芯片上盏触,以提供“單片機(jī)”解決方案渗蟹。該系列單片機(jī)多應(yīng)用于需要電池供電的便攜式儀器儀表中。

簡(jiǎn)而言之赞辩,單片機(jī)就是一個(gè)控制器雌芽,能夠?qū)斎氲碾妷哼M(jìn)行控制,并輸出我們想要的模式辨嗽。

二世落、hc06藍(lán)牙模塊的介紹

HC-06 藍(lán)牙串口通信模塊,是基于 Bluetooth Specification V2.0 帶 EDR 藍(lán)牙協(xié)議的數(shù)傳模塊糟需。無線工作頻段為 2.4GHz ISM屉佳,調(diào)制方式是 GFSK。模塊最大發(fā)射功率為 4dBm洲押,接收靈敏度-85dBm武花,板載 PCB 天線,可以實(shí)現(xiàn) 10 米距離通信诅诱。模塊采用郵票孔封裝方式髓堪,模塊大小 27mm×13mm×2mm,方便客戶嵌入應(yīng)用系統(tǒng)之內(nèi)。自帶 LED 狀態(tài)指示燈干旁,可直觀判斷藍(lán)牙的連接狀態(tài)驶沼。模塊采用 CSR 的 BC417 芯片,支持 AT 指令争群,用戶可根據(jù)需要更改角色(主回怜、從模式)以及串口波特率、設(shè)備名稱等參數(shù)换薄,使用靈活玉雾。

三、單片機(jī)與藍(lán)牙模塊的連接


圖1 單片機(jī)與hc06藍(lán)牙模塊連接示意圖

由圖1可知轻要,單片機(jī)和hc06藍(lán)牙模塊之間的通信是通過串口進(jìn)行通信复旬,hc06的TXD接單片機(jī)的RXD,hc06的RXD接單片機(jī)的TXD冲泥,而單片機(jī)的串口則根據(jù)不同型號(hào)的msp430芯片而定驹碍,本文中所使用的為f149芯片,故txd和rxd分別問p3.4凡恍,p3.5


圖2 實(shí)物連接圖

圖2為實(shí)物連接圖志秃,本實(shí)驗(yàn)步驟為 手機(jī)打開藍(lán)牙>搜尋hc06藍(lán)牙并連接>發(fā)送數(shù)據(jù)即 字符1或2或3>hc06藍(lán)牙模塊收到信息并通過串口將數(shù)據(jù)傳給單片機(jī)>單片機(jī)對(duì)收到的數(shù)據(jù)進(jìn)行處理>根據(jù)收到的字符不同控制燈的亮滅

四、代碼

本實(shí)驗(yàn)所用的軟件為IAR軟件嚼酝,工程中的主要文件為主文件main.c和配置文件Config.h

mian.c代碼如下:

/********************************************************************

//DM430-A型開發(fā)板串口接收發(fā)送程序浮还,使用單片機(jī)的串口0,顯示操作通過串口調(diào)試助手

//通過電腦與串口線連接開發(fā)板串口座闽巩,使用串口調(diào)試助手發(fā)送數(shù)據(jù)到開發(fā)板板

//開發(fā)板板會(huì)將收到的數(shù)據(jù)再發(fā)送到串口調(diào)試助手钧舌,接收采用中斷模塊,發(fā)送用查詢

//板載的BSL模塊可以通過跳線帽設(shè)置為USB轉(zhuǎn)串口模式又官,筆記本電腦沒有串口可以直接代替

//開發(fā)板的BSL區(qū)的RXD和TXD0連接延刘,TXD和RXD0連接即可

//注意使用BSL模塊作為USB轉(zhuǎn)串口功能的時(shí)候,RTS和TCK跳線帽六敬、DTR和RESET跳線帽要斷開

//波特率更改請(qǐng)通過config.h文件碘赖,直接更改baud參數(shù)即可

//調(diào)試環(huán)境:EW430 V5.30

//作者:阿迪 www.avrgcc.com

//時(shí)間:2011.09.19

********************************************************************/

#include <msp430x14x.h>

#include "Config.h"? ? ? ? ? ? ? ? ? ? //開發(fā)板配置頭文件,主要配置IO端口信息

uchar control;

//***********************************************************************

//? ? ? ? ? ? ? MSP430IO口初始化

//***********************************************************************

void Port_Init()

{

? LED8SEL? = 0x00;? ? ? ? ? ? ? ? ? ? ? //設(shè)置IO口為普通I/O模式外构,此句可省

? LED8DIR? = 0xFF;? ? ? ? ? ? ? ? ? ? ? //設(shè)置IO口方向?yàn)檩敵?/p>

? LED8PORT = 0xFF;? ? ? ? ? ? ? ? ? ? ? //P2口初始設(shè)置為FF


? DATASEL? = 0x00;? ? ? ? ? ? ? ? ? ? ? //設(shè)置IO口為普通I/O模式普泡,此句可省

? DATADIR? = 0xFF;? ? ? ? ? ? ? ? ? ? ? //設(shè)置IO口方向?yàn)檩敵?/p>

? DATAPORT = 0xFF;? ? ? ? ? ? ? ? ? ? ? //P4口初始設(shè)置為FF


? CTRSEL? =? 0x00;? ? ? ? ? ? ? ? ? ? ? //設(shè)置IO口為普通I/O模式,此句可省

? CTRDIR |=? BIT3 + BIT4;? ? ? ? ? ? ? //設(shè)置IO口方向?yàn)檩敵?控制口在P63,P64

? CTRPORT =? 0xFF;? ? ? ? ? ? ? ? ? ? ? //P6口初始設(shè)置為FF?

}

//*************************************************************************

//? ? ? ? ? ? ? MSP430串口初始化

//*************************************************************************

void UART_Init()

{

? U0CTL|=SWRST + CHAR;? ? ? ? ? ? ? ? //復(fù)位SWRST审编,8位數(shù)據(jù)模式

? U0TCTL|=SSEL1;? ? ? ? ? ? ? ? ? ? ? //SMCLK為串口時(shí)鐘

? U0BR1=baud_h;? ? ? ? ? ? ? ? ? ? ? //BRCLK=8MHZ,Baud=BRCLK/N撼班,低位

? U0BR0=baud_l;? ? ? ? ? ? ? ? ? ? ? //N=UBR+(UxMCTL)/8,高位

? U0MCTL=0x00;? ? ? ? ? ? ? ? ? ? ? ? //微調(diào)寄存器為0垒酬,波特率9600bps

? ME1|=UTXE0;? ? ? ? ? ? ? ? ? ? ? ? //UART0發(fā)送使能

? ME1|=URXE0;? ? ? ? ? ? ? ? ? ? ? ? //UART0接收使能

? U0CTL&=~SWRST;? ? ? ? ? ? ? ? ? ? ? //對(duì)SWRST進(jìn)行清零砰嘁,表示設(shè)置已經(jīng)完成

? IE1|=URXIE0;? ? ? ? ? ? ? ? ? ? ? ? //接收中斷使能位件炉,采用發(fā)送查詢,接收中斷矮湘,當(dāng)接收到數(shù)據(jù)的時(shí)候觸發(fā)中斷斟冕,將數(shù)據(jù)存儲(chǔ)到buffer緩存器中


? P3SEL|= BIT4 + BIT5;? ? ? ? ? ? ? ? //設(shè)置IO口為第二功能模式,啟用UART功能

? P3DIR|= BIT4;? ? ? ? ? ? ? ? ? ? ? //P3.4為TXD缅阳,設(shè)置TXD0口方向?yàn)檩敵?/p>

}

//*************************************************************************

//? ? ? ? ? ? ? 串口0發(fā)送數(shù)據(jù)函數(shù)

//*************************************************************************

void Send_Byte(uchar data)

{

? while(!(IFG1&UTXIFG0));? ? ? ? ? //發(fā)送寄存器空的時(shí)候發(fā)送數(shù)據(jù)

? ? U0TXBUF=data;

}

//*************************************************************************

//? ? ? ? ? ? ? 串口0發(fā)送字符串函數(shù)

//*************************************************************************

void Print_Str(uchar *s)

{

? ? while(*s != '\0')

? ? {

? ? ? ? Send_Byte(*s++);

? ? }

}

//*************************************************************************

//? ? ? ? ? ? ? 處理來自串口0的接收中斷

//*************************************************************************

#pragma vector=UART0RX_VECTOR

__interrupt void UART0_RX_ISR(void)

{

? //uchar data=0;

? control = U0RXBUF;? ? ? ? ? ? ? ? ? ? ? //接收到的數(shù)據(jù)存起來

? Send_Byte(control);? ? ? ? ? ? ? ? ? ? //將接收到的數(shù)據(jù)再發(fā)送出去

}

//*************************************************************************

//? ? ? ? ? 主函數(shù)

//*************************************************************************

void main(void)

{

? WDT_Init();? ? ? ? ? ? ? ? ? ? ? ? //看門狗設(shè)置

? Clock_Init();? ? ? ? ? ? ? ? ? ? ? //系統(tǒng)時(shí)鐘設(shè)置

? UART_Init();? ? ? ? ? ? ? ? ? ? ? ? //串口設(shè)置初始化

? Close_LED();? ? ? ? ? ? ? ? ? ? ? ? //關(guān)閉數(shù)碼管顯示

? Print_Str("I AM READY\n");? ? ? ? ? ? //發(fā)送字符串測(cè)試

? _EINT();? ? ? ? ? ? ? ? ? ? ? ? ? ? //開中斷


? P2SEL = 0x00; //p2都設(shè)置為io口輸出

? P2DIR = 0x03;//設(shè)置p2.0 p2.1為輸出


? while(1)? ? ? ? ? ? ? ? ? ? ? ? ? ? //無限循環(huán)

? ? {

? ? ? if(control=='1')

? ? {

? ? P2OUT = 0x01;//設(shè)置p2.0為輸出高電平

? ? }


? ? ? if(control=='2')

? ? {

? ? P2OUT = 0x02;//設(shè)置p2.1為輸出高電平

? ? }


? ? ? if(control=='3')

? ? {

? ? P2OUT = 0x00;//設(shè)置p2.0 p2.1為輸出低電平

? ? }


? ? }

}


Config.h文件代碼如下:

#define CPU_F ((double)8000000)

#define delay_us(x) __delay_cycles((long)(CPU_F*(double)x/1000000.0))

#define delay_ms(x) __delay_cycles((long)(CPU_F*(double)x/1000.0))

#define uchar unsigned char

#define uint? unsigned int

#define ulong unsigned long

/*當(dāng)BRCLK=CPU_F時(shí)用下面的公式可以計(jì)算磕蛇,否則要根據(jù)設(shè)置加入分頻系數(shù)*/

#define baud? ? ? ? ? 9600? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //設(shè)置波特率的大小

#define baud_setting? (uint)((ulong)CPU_F/((ulong)baud))? //波特率計(jì)算公式

#define baud_h? ? ? ? (uchar)(baud_setting>>8)? ? ? ? ? ? //提取高位

#define baud_l? ? ? ? (uchar)(baud_setting)? ? ? ? ? ? ? //低位

#define LED8PORT? ? ? ? P2OUT? ? ? ? ? ? ? ? ? //P2接8個(gè)LED燈

#define LED8SEL? ? ? ? P2SEL? ? ? ? ? ? ? ? ? //P2接8個(gè)LED燈

#define LED8DIR? ? ? ? P2DIR? ? ? ? ? ? ? ? ? //P2接8個(gè)LED燈

#define DATAPORT P4OUT? ? ? ? ? ? ? ? ? //數(shù)據(jù)口所在端口P4

#define DATASEL? ? ? ? P4SEL? ? ? ? ? ? ? ? ? //數(shù)據(jù)口功能寄存器,控制功能模式

#define DATADIR? ? ? ? P4DIR? ? ? ? ? ? ? ? ? //數(shù)據(jù)口方向寄存器

#define CTRPORT ? ? ? ? P6OUT? ? ? ? ? ? ? ? ? //控制線所在的端口P6

#define CTRSEL? ? ? ? ? P6SEL? ? ? ? ? ? ? ? ? //控制口功能寄存器十办,控制功能模式

#define CTRDIR? ? ? ? ? P6DIR? ? ? ? ? ? ? ? ? //控制口方向寄存器

#define DCTR0 ? ? ? ? P6OUT &= ~BIT4? ? ? ? ? //數(shù)碼管段控制位信號(hào)置低

#define DCTR1? ? ? ? ? P6OUT |=? BIT4? ? ? ? ? //數(shù)碼管段控制位信號(hào)置高

#define WCTR0 ? ? ? ? P6OUT &= ~BIT3? ? ? ? ? //數(shù)碼管位控制位信號(hào)置低

#define WCTR1? ? ? ? ? P6OUT |=? BIT3? ? ? ? ? //數(shù)碼管位控制位信號(hào)置高

//***********************************************************************

// 共陰數(shù)碼管顯示的斷碼表

//***********************************************************************

uchar table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,

? ? ? ? ? ? ? 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};

//***********************************************************************

//? ? ? ? ? ? ? ? ? 系統(tǒng)時(shí)鐘初始化

//***********************************************************************

void Clock_Init()

{

? uchar i;

? BCSCTL1&=~XT2OFF;? ? ? ? ? ? ? ? //打開XT2振蕩器

? BCSCTL2|=SELM1+SELS;? ? ? ? ? ? ? //MCLK為8MHZ秀撇,SMCLK為8MHZ

? do{

? ? IFG1&=~OFIFG;? ? ? ? ? ? ? ? ? //清楚振蕩器錯(cuò)誤標(biāo)志

? ? for(i=0;i<100;i++)

? ? ? _NOP();

? }

? while((IFG1&OFIFG)!=0);? ? ? ? ? //如果標(biāo)志位1,則繼續(xù)循環(huán)等待

? IFG1&=~OFIFG;

}

//***********************************************************************

//? ? ? ? ? ? ? MSP430內(nèi)部看門狗初始化

//***********************************************************************

void WDT_Init()

{

? WDTCTL = WDTPW + WDTHOLD;? ? ? //關(guān)閉看門狗

}

//***********************************************************************

// 關(guān)閉數(shù)碼管

//***********************************************************************

void Close_LED()

{

? DATASEL? = 0x00;? ? ? ? ? ? ? ? ? ? ? //設(shè)置IO口為普通I/O模式向族,此句可省

? DATADIR? = 0xFF;? ? ? ? ? ? ? ? ? ? ? //設(shè)置IO口方向?yàn)檩敵?/p>

? DATAPORT = 0xFF;? ? ? ? ? ? ? ? ? ? ? //P4口初始設(shè)置為FF


? CTRSEL? =? 0x00;? ? ? ? ? ? ? ? ? ? ? //設(shè)置IO口為普通I/O模式呵燕,此句可省

? CTRDIR |=? BIT3 + BIT4;? ? ? ? ? ? ? //設(shè)置IO口方向?yàn)檩敵?控制口在P63,P64

? CTRPORT =? 0xFF;? ? ? ? ? ? ? ? ? ? ? //P6口初始設(shè)置為FF?


? DCTR1;? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //關(guān)掉數(shù)碼管,以免顯示亂碼? ? ? ? ? ? ? ? ?

? WCTR1;? ? ? ? ? ? ? ? ? ?

? DATAPORT=0xFF;? ? ? ? ? ? ? ? ? ? ? ? //關(guān)數(shù)碼管? ? ? ? ? ?

? WCTR0;

}


五件相、實(shí)驗(yàn)效果

效果圖如下



發(fā)送1 設(shè)置p2.0為輸出高電平 燈亮

發(fā)送2 設(shè)置p2.1為輸出高電平 燈亮

發(fā)送3 設(shè)置p2.0 p2.1為輸出低電平 燈滅

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末虏等,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子适肠,更是在濱河造成了極大的恐慌,老刑警劉巖候引,帶你破解...
    沈念sama閱讀 212,884評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件侯养,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡澄干,警方通過查閱死者的電腦和手機(jī)逛揩,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,755評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來麸俘,“玉大人辩稽,你說我怎么就攤上這事〈用模” “怎么了逞泄?”我有些...
    開封第一講書人閱讀 158,369評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長拜效。 經(jīng)常有香客問我喷众,道長,這世上最難降的妖魔是什么紧憾? 我笑而不...
    開封第一講書人閱讀 56,799評(píng)論 1 285
  • 正文 為了忘掉前任到千,我火速辦了婚禮,結(jié)果婚禮上赴穗,老公的妹妹穿的比我還像新娘憔四。我一直安慰自己膀息,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,910評(píng)論 6 386
  • 文/花漫 我一把揭開白布了赵。 她就那樣靜靜地躺著潜支,像睡著了一般。 火紅的嫁衣襯著肌膚如雪斟览。 梳的紋絲不亂的頭發(fā)上毁腿,一...
    開封第一講書人閱讀 50,096評(píng)論 1 291
  • 那天,我揣著相機(jī)與錄音苛茂,去河邊找鬼已烤。 笑死,一個(gè)胖子當(dāng)著我的面吹牛妓羊,可吹牛的內(nèi)容都是我干的胯究。 我是一名探鬼主播,決...
    沈念sama閱讀 39,159評(píng)論 3 411
  • 文/蒼蘭香墨 我猛地睜開眼躁绸,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼裕循!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起净刮,我...
    開封第一講書人閱讀 37,917評(píng)論 0 268
  • 序言:老撾萬榮一對(duì)情侶失蹤剥哑,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后淹父,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體株婴,經(jīng)...
    沈念sama閱讀 44,360評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,673評(píng)論 2 327
  • 正文 我和宋清朗相戀三年暑认,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了困介。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,814評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡蘸际,死狀恐怖座哩,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情粮彤,我是刑警寧澤根穷,帶...
    沈念sama閱讀 34,509評(píng)論 4 334
  • 正文 年R本政府宣布,位于F島的核電站导坟,受9級(jí)特大地震影響缠诅,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜乍迄,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,156評(píng)論 3 317
  • 文/蒙蒙 一管引、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧闯两,春花似錦褥伴、人聲如沸谅将。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽饥臂。三九已至,卻和暖如春似踱,著一層夾襖步出監(jiān)牢的瞬間隅熙,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,123評(píng)論 1 267
  • 我被黑心中介騙來泰國打工核芽, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留囚戚,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,641評(píng)論 2 362
  • 正文 我出身青樓轧简,卻偏偏與公主長得像驰坊,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子哮独,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,728評(píng)論 2 351