MSP430 DM430-A開發板學習筆記(二)MSP430f149與hc06藍牙模塊的使用
1.MSP430f149與hc06藍牙模塊的連接
1.1hc06藍牙模塊
hc06藍牙模塊可以直接在淘寶上購買,去官方店買比較好,資料比較全
hc06藍牙與各種單片機的連接情況如下

因為msp430的供電也是3.3v,所以hc06藍牙模塊可以用msp430開發板上的vcc和gnd來對其進行供電和共地
然后要注意的是msp430f149的串口TXD 和 RXD 分別是p3.4和p3.5,這里的具體分析可以參考以下文章
MSP430F149串口收發程式詳解
1.2單片機模塊
單片機所用的編程軟體為IAR,所用的下載器為BSL,這些都在我的以下文章的評論區中有下載鏈接
MSP430 DM430-A開發板學習筆記(一)IAR軟體的使用
1.3單片機與hc06實物連接圖

2.IAR代碼
把我下面寫的config.h和main.c檔案放入到你們的工程中即可
2.1Config.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
/*當BRCLK=CPU_F時用下面的公式可以計算,否則要根據設定加入分頻系數*/
#define baud 9600 //設定波特率的大小
#define baud_setting (uint)((ulong)CPU_F/((ulong)baud)) //波特率計算公式
#define baud_h (uchar)(baud_setting>>8) //提取高位
#define baud_l (uchar)(baud_setting) //低位
#define LED8PORT P2OUT //P2接8個LED燈
#define LED8SEL P2SEL //P2接8個LED燈
#define LED8DIR P2DIR //P2接8個LED燈
#define DATAPORT P4OUT //資料口所在埠P4
#define DATASEL P4SEL //資料口功能暫存器,控制功能模式
#define DATADIR P4DIR //資料口方向暫存器
#define CTRPORT P6OUT //控制線所在的埠P6
#define CTRSEL P6SEL //控制口功能暫存器,控制功能模式
#define CTRDIR P6DIR //控制口方向暫存器
#define DCTR0 P6OUT &= ~BIT4 //數碼管段控制位信號置低
#define DCTR1 P6OUT |= BIT4 //數碼管段控制位信號置高
#define WCTR0 P6OUT &= ~BIT3 //數碼管位控制位信號置低
#define WCTR1 P6OUT |= BIT3 //數碼管位控制位信號置高
//***********************************************************************
// 共陰數碼管顯示的斷碼表
//***********************************************************************
uchar table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
//***********************************************************************
// 系統時鐘初始化
//***********************************************************************
void Clock_Init()
{
uchar i;
BCSCTL1&=~XT2OFF; //打開XT2振蕩器
BCSCTL2|=SELM1+SELS; //MCLK為8MHZ,SMCLK為8MHZ
do{
IFG1&=~OFIFG; //清楚振蕩器錯誤標志
for(i=0;i<100;i++)
_NOP();
}
while((IFG1&OFIFG)!=0); //如果標志位1,則繼續回圈等待
IFG1&=~OFIFG;
}
//***********************************************************************
// MSP430內部看門狗初始化
//***********************************************************************
void WDT_Init()
{
WDTCTL = WDTPW + WDTHOLD; //關閉看門狗
}
//***********************************************************************
// 關閉數碼管
//***********************************************************************
void Close_LED()
{
DATASEL = 0x00; //設定IO口為普通I/O模式,此句可省
DATADIR = 0xFF; //設定IO口方向為輸出
DATAPORT = 0xFF; //P4口初始設定為FF
CTRSEL = 0x00; //設定IO口為普通I/O模式,此句可省
CTRDIR |= BIT3 + BIT4; //設定IO口方向為輸出,控制口在P63,P64
CTRPORT = 0xFF; //P6口初始設定為FF
DCTR1; //關掉數碼管,以免顯示亂碼
WCTR1;
DATAPORT=0xFF; //關數碼管
WCTR0;
}
2.2main.c
/********************************************************************
//DM430-A型開發板串口接收發送程式,使用單片機的串口0,顯示操作通過串口除錯助手
//通過電腦與串口線連接開發板串口座,使用串口除錯助手發送資料到開發板板
//開發板板會將收到的資料再發送到串口除錯助手,接收采用中斷模塊,發送用查詢
//板載的BSL模塊可以通過跳線帽設定為USB轉串口模式,筆記本電腦沒有串口可以直接代替
//開發板的BSL區的RXD和TXD0連接,TXD和RXD0連接即可
//注意使用BSL模塊作為USB轉串口功能的時候,RTS和TCK跳線帽、DTR和RESET跳線帽要斷開
//波特率更改請通過config.h檔案,直接更改baud引數即可
//除錯環境:EW430 V5.30
//作者:阿迪 www.avrgcc.com
//時間:2011.09.19
********************************************************************/
#include <msp430x14x.h>
#include "Config.h" //開發板配置頭檔案,主要配置IO埠資訊
uchar control;
//***********************************************************************
// MSP430IO口初始化
//***********************************************************************
void Port_Init()
{
LED8SEL = 0x00; //設定IO口為普通I/O模式,此句可省
LED8DIR = 0xFF; //設定IO口方向為輸出
LED8PORT = 0xFF; //P2口初始設定為FF
DATASEL = 0x00; //設定IO口為普通I/O模式,此句可省
DATADIR = 0xFF; //設定IO口方向為輸出
DATAPORT = 0xFF; //P4口初始設定為FF
CTRSEL = 0x00; //設定IO口為普通I/O模式,此句可省
CTRDIR |= BIT3 + BIT4; //設定IO口方向為輸出,控制口在P63,P64
CTRPORT = 0xFF; //P6口初始設定為FF
}
//*************************************************************************
// MSP430串口初始化
//*************************************************************************
void UART_Init()
{
U0CTL|=SWRST + CHAR; //復位SWRST,8位資料模式
U0TCTL|=SSEL1; //SMCLK為串口時鐘
U0BR1=baud_h; //BRCLK=8MHZ,Baud=BRCLK/N,低位
U0BR0=baud_l; //N=UBR+(UxMCTL)/8,高位
U0MCTL=0x00; //微調暫存器為0,波特率9600bps
ME1|=UTXE0; //UART0發送使能
ME1|=URXE0; //UART0接收使能
U0CTL&=~SWRST; //對SWRST進行清零,表示設定已經完成
IE1|=URXIE0; //接收中斷使能位,采用發送查詢,接收中斷,當接收到資料的時候觸發中斷,將資料存盤到buffer快取器中
P3SEL|= BIT4 + BIT5; //設定IO口為第二功能模式,啟用UART功能
P3DIR|= BIT4; //P3.4為TXD,設定TXD0口方向為輸出
}
//*************************************************************************
// 串口0發送資料函式
//*************************************************************************
void Send_Byte(uchar data)
{
while(!(IFG1&UTXIFG0)); //發送暫存器空的時候發送資料
U0TXBUF=data;
}
//*************************************************************************
// 串口0發送字串函式
//*************************************************************************
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; //接收到的資料存起來
Send_Byte(control); //將接收到的資料再發送出去
}
//*************************************************************************
// 主函式
//*************************************************************************
void main(void)
{
WDT_Init(); //看門狗設定
Clock_Init(); //系統時鐘設定
UART_Init(); //串口設定初始化
Close_LED(); //關閉數碼管顯示
Print_Str("I AM READY\n"); //發送字串測驗
_EINT(); //開中斷
P2SEL = 0x00; //p2都設定為io口輸出
P2DIR = 0x03;//設定p2.0 p2.1為輸出
while(1) //無限回圈
{
if(control=='1')
{
P2OUT = 0x01;//設定p2.0為輸出高電平
}
if(control=='2')
{
P2OUT = 0x02;//設定p2.1為輸出高電平
}
if(control=='3')
{
P2OUT = 0x00;//設定p2.0 p2.1為輸出低電平
}
}
}
3.手機app
手機app可以搜 藍牙串口app就行
打開手機藍牙>連接我們的藍牙模塊(藍牙模塊可以自己改名字 這一塊你在淘寶上買了模塊后 自己在電腦上進行檢查模塊好壞的時候 可以自行操作設定)>發送資料>hc06藍牙模塊會接收到資訊并把資料傳給單片機進行處理
效果圖如下,
發送1 設定p2.0為輸出高電平 燈亮
發送2 設定p2.1為輸出高電平 燈亮
發送3 設定p2.0 p2.1為輸出低電平 燈滅



轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/277741.html
標籤:其他
