主题中讨论的其他器件:MSP430G2553、 MSP430G2253、 MSPWARE
工具/软件:Code Composer Studio
在我的项目中 、我将使用 HC05蓝牙模块和 Android 应用通过蓝牙进行 MSP430语音控制 在此过程中、我将使用手机上的蓝牙 HC05来控制 MSP430板上的 LED。 我在本教程中提到了这个项目
、但这里的电路板是 MSP430G2553、我使用的是 MSP430FR5969、因此引脚配置完全不同、我非常困惑应该做些什么来使这个代码正常工作。
我对 MSP430非常了解。 我最初以为不会那么困难、但在这种情况下、我真的感到无助。 请帮助我进行所需的相关更改。 我在这里使用蓝牙 HC05代替 HC06。
这是教程中给出的代码-
/*
* MSP430G2253 USCIA UART 代码
*安东尼·斯克尼
* www.Coder-Tronics.com
* 2014年10月
*
*该代码可用于连接 HC06蓝牙适配器板。
*代码等待接收数据、然后调用 UART 中断、
*然后将接收到的缓冲区分配给变量 Rx_Data。 RX_Data 是
*在开关情况状态中使用、可根据操作各种功能
*通过蓝牙接收的 ASCII 代码。
*
#include
unsigned char Rx_Data = 0;//通过 UART 接收到的字节
unsigned int count = 0;//用于闪烁 LED 演示
int main (空)
{
/***设置系统时钟***/
WDTCTL = WDTPW + WDTHOLD;//停止 WDT
IF (CALBC1_1MHz =0xFF)//如果校准常数被擦除
{
while (1);//不加载,陷阱 CPU!
}
DCOCTL = 0;//选择最低 DCOx 和 MODx 设置
BCSCTL1 = CALBC1_1MHz;//设置 DCO
DCOCTL = CALDCO_1MHz;
/***设置 GPIO ***/
P1SEL = BIT1 + BIT2;// P1.1 = RXD、P1.2= TXD
P1SEL2 = BIT1 + BIT2;// P1.1 = RXD、P1.2=TXD
P1DIR |= BIT6 + BIT0;// P1.6设置为输出
P1OUT &=~(BIT6 + BIT0);// P1.6设置为低电平
/***设置 USCI A***/
UCA0CTL1 |= UCSSEL_2;// SMCLK
UCA0BR0 = 104;// 1MHz 9600
UCA0BR1 = 0;// 1MHz 9600
UCA0MCTL = UCBRS0;//调制 UCBRSx = 1
UCA0CTL1 &=~UCSWRST;//初始化 USCI 状态机
IE2 |= UCA0RXIE;//启用 USCI_A0 RX 中断
_bis_SR_register (LPM0_bits + GIE);//输入 LPM0、中断被启用
while (1)
{
开关(Rx_Data)
{
案例0x41://在命令上
//while (!(IFG2&UCA0TXIFG));// USCI_A0 TX 缓冲器准备就绪?
//UCA0TXBUF = 0x41;//发送8位字符
TA0CCTL0 &=~CCIE;//禁用 Timer0_A 中断
P1SEL &=~BIT6;// P1.6被选为 GPIO
P1OUT |= BIT6 + BIT0;// P1.0和 P1.6设置为高电平
中断;
案例0x42://关闭命令
//while (!(IFG2&UCA0TXIFG));// USCI_A0 TX 缓冲器准备就绪?
//UCA0TXBUF = 0x42;//发送8位字符
TA0CCTL0 &=~CCIE;//禁用 Timer0_A 中断
P1SEL &=~BIT6;// P1.6被选为 GPIO
P1OUT &=~(BIT6 + BIT0);// P1.0和 P1.6设置为低电平
中断;
案例0x46://闪存命令
//while (!(IFG2&UCA0TXIFG));// USCI_A0 TX 缓冲器准备就绪?
//UCA0TXBUF = 0x46;//发送8位字符
/*** Timer0_A 设置***/
TA0CCR0 |= 10000-1;//计数器值
TA0CCTL0 |= CCIE;//启用 Timer0_A 中断
TA0CTL |= TASSEL_2 + MC_1;// ACLK、向上计数模式(计数到 TA0CCR0)
/*** Timer0_A 设置***/
中断;
情况0x3E://增加命令
中断;
情况0x3C://减少命令
中断;
案例0x31:// 1命令
中断;
情况0x32:// 2命令
中断;
案例0x33:// 3命令
中断;
案例0x34:// 4命令
中断;
案例0x35:// 5命令
中断;
默认值:break;
}
_bis_SR_register (LPM0_bits);//输入 LPM0、中断被启用
}
}
// USCI A 中断处理程序
#if defined (__TI_Compiler_version__)|| Defined (__IAR_systems_ICC__)
#pragma vector=USCIAB0RX_vector
_interrupt void USCI0RX_ISR (void)
#Elif defined (_GNU_)
void __attribute__((中断(USCIAB0RX_vector)) USCI0RX_ISR (void)
其他
错误编译器不受支持!
#endif
{
RX_Data = UCA0RXBUF;//将接收到的字节分配给 RX_Data
_BIC_SR_REGISTER_ON_EXIT (LPM0_BITS);//唤醒 CPU
}
#pragma vector=TIMER0_A0_VECTOR // Timer0 A0中断服务例程
_interrupt void Timer0_A0 (void){
count++;
如果(计数== 10)
{
P1OUT ^= BIT0 + BIT6;// P1.0切换(红色 LED)
计数= 0;
}
}
我会遇到以下错误:
说明资源路径位置类型
#10010链接期间遇到错误;"UART.OUT"未构建 UART C/C++问题
#10234-D 未解析的符号仍然存在 UART C/C++问题
未解析的符号 BCSCTL1、首先在./main.obj UART C/C++问题中引用
未解析的符号 CALBC1_1MHz、首先在./main.obj UART C/C++问题中引用
未解析的符号 CALDCO_1MHz、首先在./main.obj UART C/C++问题中引用
未解析的符号 DCOCTL、首先在./main.obj UART C/C++问题中引用
未解析的符号 IE2、首先在./main.obj UART C/C++问题中引用
未解析的符号 P1DIR、首先在./main.obj UART C/C++问题中引用
未解析的符号 P1OUT、首先在./main.obj UART C/C++问题中引用
未解析的符号 P1SEL、首先在./main.obj UART C/C++问题中引用
未解析的符号 P1SEL2、首先在./main.obj UART C/C++问题中引用
未解析符号 UCA0BR0、首先在./main.obj UART C/C++问题中引用
未解析的符号 UCA0BR1、首先在./main.obj UART C/C++问题中引用
未解析的符号 UCA0CTL1、首先在./main.obj UART C/C++问题中引用
未解析的符号 UCA0MCTL、首先在./main.obj UART C/C++问题中引用