单片机
返回首页

MSP430 DM430-A开发板学习笔记(二)MSP430f149与hc06蓝牙模块的使用

2022-09-07 来源:csdn

1.MSP430f149与hc06蓝牙模块的连接

1.1hc06蓝牙模块

hc06蓝牙模块可以直接在淘宝上购买,去官方店买比较好,资料比较全

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

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


#include

#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 != '')

    {

        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 READYn');             //发送字符串测试

  _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为输出低电平 灯灭


发送1

发送2

发送3


进入单片机查看更多内容>>
相关视频
  • RISC-V嵌入式系统开发

  • SOC系统级芯片设计实验

  • 云龙51单片机实训视频教程(王云,字幕版)

  • 2022 Digi-Key KOL 系列: 你见过1GHz主频的单片机吗?Teensy 4.1开发板介绍

  • TI 新一代 C2000™ 微控制器:全方位助力伺服及马达驱动应用

  • MSP430电容触摸技术 - 防水Demo演示

精选电路图
  • PIC单片机控制的遥控防盗报警器电路

  • 红外线探测报警器

  • 使用ESP8266从NTP服务器获取时间并在OLED显示器上显示

  • 用NE555制作定时器

  • RS-485基础知识:处理空闲总线条件的两种常见方法

  • 基于ICL296的大电流开关稳压器电源电路

    相关电子头条文章