主题中讨论的其他器件:MSP430F5529、 C2000WARE、 controlSUITE、
您好! 我正在尝试从运行频率为9600BAUD 的 HC06接收字符串。 我在 MSP430F5529上有一个工作的系统。
这是我想象中应该起作用的代码。 我的问题实际上不是在 RXBUF 中接收任何内容。 我正在被中断、这意味着我正在接收一个字节、但没有任何内容传输到我的数组。
我曾尝试假设 LSPCLK 为90MHz、默认 SYSCLK/4等于22.5MHz。 使用公式:
LSPCLK/(9600*8)- 1、我发现22.5MHz 的值为0x123、90MHz 的值为0x492、存储在:
SciaRegs.SCIHBAUD = 0x0000;
SciaRegs.SCILBAUD = 0x0492;// 9600波特,我还尝试了0x0123。
我一定会做些错误的事! 如果有人能帮我、这将是学校项目的一小部分、我们将不胜感激!
谢谢!
以下是我正在运行的代码(相关内容):
_interrupt void sciaRxFifoIsr (void);
char RXParseData[256]={};//将接收到的数据存储在 RXBUF 中的数组
void main (void)
{
//-- CPU 初始化
InitSysCtrl();//初始化 CPU (文件:sysctrl.c)
InitPieCtrl();//初始化并启用 PIE (文件:PIECTRL.c)
InitWatchdog();//初始化看门狗计时器(文件:watchdog.c)
//-- SCI ----设置
EALLOW;
/*为所选引脚启用内部上拉*/
//用户可以启用或禁用上拉。
//这将启用指定引脚的上拉电阻。
GpioCtrlRegs.GPAPUD.bit.GPIO28 = 0;//为 GPIO28启用上拉(SCIRXDA)
/*将所选引脚的限定条件设置为仅异步*/
默认情况下、//输入与 SYSCLKOUT 同步。
//这将为所选引脚选择异步(无限定条件)。
GpioCtrlRegs.GPAQSEL2.bit.GPIO28 = 3;//异步输入 GPIO28 (SCIRXDA)
/*使用 GPIO 寄存器配置 SCI-A 引脚*/
//这指定哪些可能的 GPIO 引脚将是 SCI 功能引脚。
GpioCtrlRegs.GPAMUX2.bit.GPIO28=1;//为 SCIRXDA 操作配置 GPIO28
EDIS;
//结束 SCI 设置
//步骤3. 清除所有中断并初始化 PIE 矢量表:
//禁用 CPU 中断
Dint;
//将 PIE 控制寄存器初始化为默认状态。
//默认状态为禁用所有 PIE 中断和标志
//被清除。
//此函数位于 F2806x_PIECTRL.c 文件中。
InitPieCtrl();
//禁用 CPU 中断并清除所有 CPU 中断标志:
IER = 0x0000;
IFR = 0x0000;
//使用指向 shell 中断的指针初始化 PIE 矢量表
//服务例程(ISR)。
//这将填充整个表,即使是中断也是如此
//在本例中未使用。 这对于调试很有用。
//可以在 F2806x_DefaultIsr.c 中找到 shell ISR 例程
//此函数可在 F2806x_PieVect.c 中找到
InitPieVectTable();
//此示例中使用的中断被重新映射到
//此文件中的 ISR 函数。
EALLOW;//这是写入 EALLOW 受保护寄存器所必需的
PieVectTable.SCIRXINTA =&sciaRxFifoIsr;
EDIS;//这是禁止写入 EALLOW 受保护寄存器所必需的
//FIFO 设置
SciaRegs.SCICCR.all =0x0007;// 1停止位,无回路
//无奇偶校验,8个字符位,
//异步模式,空闲线协议
SciaRegs.SCICTL1.all =0x0001;//启用 RX、内部 SCICLK、
//禁用 TX、RX ERR、睡眠、TXWAKE
SciaRegs.SCICTL2.bit.RXBKINTENA=1;
SciaRegs.SCIHBAUD = 0x0000;
SciaRegs.SCILBAUD = 0x0492;// 9600波特,我还尝试了0x0123。
SciaRegs.SCIFFRX.All=0x0022;
SciaRegs.SCIFFCT.All=0x00;
SciaRegs.SCICTL1.all =0x0021;//从复位中撤回 SCI
SciaRegs.SCIFFRX.bit.RXFIFORESET=1;
//启用此示例所需的中断
PieCtrlRegs.PIECTRL.bit.ENPIE = 1;//启用 PIE 块
PieCtrlRegs.PIEIER9.bit.INTx1=1;// PIE 组9,INT1
PieCtrlRegs.PIEIER9.bit.INTx2=1;// PIE 组9,int2
IER = 0x100;//启用 CPU INT
EINT;
//--启用全局中断
asm (" CLRC INTM、DBGM");//启用全局中断和实时调试
}
_interrupt void sciaRxFifoIsr (void)
{
uint16 i = 0;
while (1)
{
RXParseData[i]=SciaRegs.SCIRXBUF.all;
i++;
}
SciaRegs.SCIFFRX.bit.RXFFOVRCLR=1;//清除溢出标志
SciaRegs.SCIFFRX.bit.RXFFINTCLR=1;//清除中断标志
PieCtrlRegs.PIEACX.All|=0x100;//发出 PIE ACK
}

