找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4286|回复: 5
收起左侧

基于msp430f5529的蓝牙遥控小车实践

  [复制链接]
ID:955176 发表于 2021-7-23 21:28 | 显示全部楼层 |阅读模式
这个是我在准备电赛的时候小师傅布置的任务,这个模块主要是要搞懂UART通信模块的原理,然后对蓝牙通信的原理有所了解即可。
一、 UART串口通信
固定代码模式:
{
配置UART寄存器
}
       #pragma vector = USCI_A1_VECTOR
__interrupt void USCI_ISR()
{
       内部程序;
}
1、配置UCAxCTL0        //USCI_Ax Control Register 0
        UCPEN                启用奇偶校验功能寄存器(一般情况下不启用奇偶校验)
0 关闭奇偶校验;
1 打开奇偶校验,将生成奇偶校验位(UCAxTXD)
    注意:(UCAxRXD). In address-bit multiprocessor mode, the address bit is included in the parity calculation.
       UCPAR                对奇偶校验项的选择。当禁用奇偶校验时,不使用UCPAR。
                                                  0b = Odd parity
1b = Even parity
       UCMSB                MSB首先选择。(控制 接收和发射移位寄存器 的方向,一般选择0,因为默认值/模式为0(LSB first),故不用设置
                                                  0b = LSB first
        1b = MSB first
       UC7BIT                字符长度。选择7位或8位字符长度,即串口发送的数据长度,默认值/模式0(8位),故不用设置。
                                              0       8位   1    7位
       UCSPB                选择停止位的个数。默认值/模式为0(1位停止位),故不用设置。
                                             0 一位停止位                        1 两位停止位
       UCMODEx        USCI模式选择。即选择USCI的工作模式,UCMODEx位在UCSYNC=0时选择异步模式。因为本模块是学习UART,所以USCI要设置为UART mode,同时UCMODEx默认值/模块为00b,所以在使用UART模块时不用设置此寄存器。
      00b = UART mode        
      01b = Idle-line multiprocessor mode
      10b = Address-bit multiprocessor mode
      11b = UART mode with automatic baud-rate detection
        UCSYNC                同步或异步模式启用模块。默认值/模块为0(启用异步模式),故在使用异步UART时不用设置。
                                                0 启用异步模式                1 启用同步模式
         2、配置UCAxCTL1 寄存器                //USCI_Ax Control Register 1
                在使用UART时首先需复位UCAxCTL1、选择时钟源,再配置其他寄存器,最后取消对UCAxCTL1的复位。
                        例如:      UCA1CTL1 |=  UCSWRST;   //复位USCI_AX
            UCA1CTL1 |=  UCSSEL_1;    //选择时钟源SMCLK ACLK
            UCA1BR0 = 0x03;    // 32768Hz 9600 波特率为9600
            UCA1BR1 = 0x00;    // 32768Hz 9600
                                               UCA1MCTL |= UCBRS_3 + UCBRF_0;  
                                                           UCA1CTL1 &= ~UCSWRST;     //清除复位        
       UCSSELx                选择USCI时钟源。这些位选择BRCLK源时钟。
                                           00b = UCAxCLK (external USCI clock)
                                           01b = ACLK
                                           10b = SMCLK
                                           11b = SMCLK
                                           UXRXEIE
                                           UCBRKIE
                                           UCDORM
                                           UCTXADDR
                            UCTXBRK
                            UCSWRST
       3、配置UCAxBR0                Low byte of clock prescaler setting of the baud-rate generator. The 16-bit value
of (UCAxBR0 + UCAxBR1 × 256) forms the prescaler value UCBRx.
波特率发生器的时钟预压器设置的低字节。16位值(UCAxBR0+UCAxBR1×256)形成预压算器值UCBRx。
                       查找数据手册,例:UCA1BR0 = 0x03;
      4、配置UCAxBR1        High byte of clock prescaler setting of the baud-rate generator. The 16-bit value
of (UCAxBR0 + UCAxBR1 × 256) forms the prescaler value UCBRx.
波特率发生器的时钟压力机设置的高字节。16位值(UCAxBR0+UCAxBR1×256)形成预压算器值UCBRx。
查找数据手册, 例:UCA1BR1 = 0x00;
     5、配置UCAxMCTL  例:UCA1MCTL |= UCBRS_3 + UCBRF_0;
     UCBRFx                第一个调制阶段的选择。这些比特确定了当UCOS16=1时的BITCLK16的调制模式。被UCOS16=0忽略
     UCBRSx                第二个调制阶段的选择。这些位决定了BITCLK的调制模式。表36-2给出了调制模式。
                        UCOS16        Oversampling mode enabled
0b = Disabled
1b = Enabled
      6、UCAxSTAT((●'◡'●)这个没用到我就没有写笔记)
      7、UCAxRXBUF                数据接收缓冲区
      8、UCAxTXBUF                数据发送缓冲区
               
      UCAxIE
       UCTXIE                关闭启用传输中断,默认值/模式为0(关闭传输中断), 1 打开传输中断
       UCRXIE                关闭启用接收中断,默认值/模式为0(关闭接收中断), 1 打开接收中断
二、代码
//蓝牙模块
void set_uart_registers()
{
        P4SEL |= BIT4+BIT5;
        UCA1CTL1 |= UCSWRST;
        UCA1CTL1 |= UCSSEL_1;        //ACLK 副时钟

        UCA1BR0 = 0x03;
        UCA1BR1 = 0x00;                //32768HZ  9600baud
        UCA1MCTL |= UCBRS_3 + UCBRF_0;

        UCA1CTL1 &=~ UCSWRST;
        UCA1IE |= UCRXIE;        //open interrupt of

        _EINT();
}

#pragma vector = USCI_A1_VECTOR
__interrupt void USCI_ISR()
{
        //UCA1TXBUF = UCA1RXBUF;
        switch(__even_in_range(UCA1IV,4))
        {
                case 0:break;                                       // Vector 0 - No interrupt
                case 2:                                           // Vector 2 - RXIFG
                    BUF = UCA1RXBUF;
                    UCA1TXBUF = UCA1RXBUF;
              if(BUF == 'A')
                {
                      P6OUT |=  BIT0;
                      P6OUT &=~ BIT1;
                      P6OUT |=  BIT2;
                      P6OUT &=~ BIT3;
                }

                if(BUF == 'B')
                {
                                P6OUT &=~ BIT0;
                                P6OUT |=  BIT1;
                                P6OUT &=~ BIT2;
                                P6OUT |=  BIT3;
                }

                if(BUF == 'C')
                {
                                P6OUT &=~ BIT0;
                                P6OUT |=  BIT1;
                                P6OUT |=  BIT2;
                                P6OUT &=~ BIT3;
                }

                if(BUF == 'D')
                {
                                P6OUT |=  BIT0;
                                P6OUT &=~ BIT1;
                                P6OUT &=~ BIT2;
                                P6OUT |=  BIT3;
                }

                if(BUF == 'E')
                {
                                P6OUT &=~ BIT0;
                                P6OUT &=~ BIT1;
                                P6OUT &=~ BIT2;
                                P6OUT &=~ BIT3;
                }

                if(BUF =='F')
                {
                        P1OUT ^= BIT0;
                }

                if(BUF == '1')
                {
                        P4OUT ^= BIT7;
                }
                break;
            case 4:break;

            default: break;
        }

}

TI.rar

556.61 KB, 下载次数: 114, 下载积分: 黑币 -5

原代码

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:897756 发表于 2021-7-25 15:04 | 显示全部楼层
__even_in_range(UCA1IV,4)是哪里的呢?
回复

使用道具 举报

ID:954229 发表于 2021-7-28 15:09 | 显示全部楼层
143838 发表于 2021-7-25 15:04
__even_in_range(UCA1IV,4)是哪里的呢?

头文件,作用是加快switch的运行速度,
回复

使用道具 举报

ID:825705 发表于 2021-10-26 11:26 | 显示全部楼层
为什么连上蓝牙无法控制呢
回复

使用道具 举报

ID:964581 发表于 2022-7-20 19:50 | 显示全部楼层
楼主,这个接什么驱动呢?
回复

使用道具 举报

ID:1040761 发表于 2022-7-27 23:00 | 显示全部楼层
用HC5蓝牙可以连接嘛?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表