This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] MSP430FR2433:CAN#39;t Get UART 以通过 HC-05向其他 MSP 发送正确的数据

Guru**** 2563960 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/748587/msp430fr2433-can-t-get-uart-to-send-correct-data-to-other-msp-over-hc-05

器件型号:MSP430FR2433

那么、基本上这里是布局。 我有一个主 HC-05蓝牙模块 通过一个操纵杆连接到一个 MSP、另一个具有从设备。

这是主设备 HC-05 MSP 的代码

第一个 MSP 代码

#include "msp430.h";#define controlled include 文件

名称 main;模块名称

公共主;使主标签可见
;在本模块之外
org 0FFFEh
DC16 init;将复位矢量设置为'init'标签

RSEG CSTACK;段的预先声明
RSEG 代码;将程序置于“代码”段中

RSEG DATA16_N
TXData DW 0h
电压 DW 0h
初始化:MOV #SFE (CSTACK),SP;设置堆栈

主程序:NOP;主程序
MOV.W #WDTPW+WDTHOLD、&WDTCTL;停止看门狗计时器

;18:E4:35F093 <--蓝牙地址

;端口
BIS.b #BIT0、P1DIR
BIC.b #BIT0、P1OUT

;按钮设置
BIS.B #BIT7、&P2REN;P2.7上拉或下拉寄存器被启用
BIS.B #BIT7、&P2OUT;P2.7设置为下拉寄存器
BIS.B #BIT7、&P2IES;P2.7低/高边沿被启用
BIC.B #BIT7、&P2IFG;P2.7 IFG 被清零

;设置时钟
BIS.w #SCG0、SR
BIS.w #SELREF_REFOCLK、&CSCTL3;为时钟源= REFOCLK 创建基准
MOV.w #0、&CSCTL0
BIC.w #DCORSEL_7、&CSCTL1;清除数据@ CSCTL1
BIS.w #DCORSEL_0、&CSCTL1;将 DCO 设置为1MHz 运行
MOV.w #FLLD_0+30、&CSCTL2;FLLD+30 = 1MHz DCO 的 FLLD
BIC.w #SCG0、SR

;设置 ADC
MOV.w #ADCPCTL1、&SYSCFG2
BIC.w #LOCKLPM5、PM5CTL0
MOV.w #ADCSHT_2|ADCON、&ADCCTL0
BIS.w #ADCSHP、&ADCCTL1
BIS.w #ADCRES、&ADCCTL2
BIS.w #ADCINCH_1、&ADCMCTL0
BIS.w #ADCIE0、&ADCIE

解锁 FLL:
MOV.w &CSCTL7、R13
和.w #FLLUNLOCK0|FLLUNLOCK1、R13
Jnz 解锁 FLL
MOV.w #SELMS_DCOCLKDIV+SELA_REFOCLK、&CSCTL4
BIC.w #LOCKLPM5、PM5CTL0

;设置 UART
BIS.b #BIT4+BIT4、&P1SEL0
BIS.w #UCSWRST、&UCA0CTLW0
BIS.w #UCSSEL_SMCLK、和 UCA0CTLW0
MOV.b #104、UCA0BR0
CLR.b 和 UCA0BR1
BIS.w #UCBRS0、&UCA0MCTLW
BIC.w #UCSWRST、&UCA0CTLW0

大型环路:
BIS.w #ADCENC|ADCSC、&ADCCTL0
NOP
BIS.w #LPM3+GIE、SR
NOP

CMP #250h、电压
JHS L2
CMP #01ffh、电压
JL L3
BIC.b #BIT0、&P1OUT
JMP MainLoop
bit.w #0x03、TXData
调用#Send_Data
JMP MainLoop
L3:
bit.w #0x01、TXData
XOR.b #BIT0、P1OUT
调用#Send_Data
JMP MainLoop
L2:
bit.w #0x02、TXData
XOR.b #BIT0、P1OUT
调用#Send_Data
JMP MainLoop


ADC_ISR:
MOV.w &ADCMEM0、电压
BIC.w #LPM3、0 (SP)
TI

发送数据:
CMP.w #0x1、&UCTXIFG
JZ 发送数据
MOV.w TXData、&UCA0TXBUF
可重置

常见的 INTVEC
org ADC_vector
DW ADC_ISR


结束



第二个 MSP 代码

这是我的从器件 MSP 的代码

#include "msp430.h";#define controlled include 文件

名称 main;模块名称

公共主;使主标签可见
;在本模块之外
org 0FFFEh
DC16 init;将复位矢量设置为'init'标签

RSEG CSTACK;段的预先声明
RSEG 代码;将程序置于“代码”段中
RSEG DATA16_N
RXData DW 0h

初始化:MOV #SFE (CSTACK),SP;设置堆栈

主程序:NOP;主程序
MOV.W #WDTPW+WDTHOLD、&WDTCTL;停止看门狗计时器

;18:E4:35F093 <--蓝牙地址

;端口
BIS.b #BIT0、P1DIR
BIC.b #BIT0、P1OUT
;中继端口

;转发
;正面
BIS.b #BIT0、P2DIR
BIS.b #BIT1、P2DIR
BIS.b #BIT0、P2OUT
BIC.b #BIT1、P2OUT
;返回
BIS.b #BIT5、P2DIR
BIS.b #BIT6、P2DIR
BIS.b #BIT5、P2OUT
BIC.b #BIT6、P2OUT
;向后
;正面
BIS.b #BIT0、P2DIR
BIS.b #BIT1、P2DIR
BIS.b #BIT1、P2OUT
BIC.b #BIT0、P2OUT
;返回
BIS.b #BIT5、P2DIR
BIS.b #BIT6、P2DIR
BIS.b #BIT6、P2OUT
BIC.b #BIT5、P2OUT

BIS.w #SCG0、SR
BIS.w #SELREF_REFOCLK、&CSCTL3;为时钟源= REFOCLK 创建基准
MOV.w #0、&CSCTL0
BIC.w #DCORSEL_7、&CSCTL1;清除数据@ CSCTL1
BIS.w #DCORSEL_0、&CSCTL1;将 DCO 设置为1MHz 运行
MOV.w #FLLD_0+30、&CSCTL2;FLLD+30 = 1MHz DCO 的 FLLD
NOP
NOP
NOP
BIC.w #SCG0、SR

解锁 FLL:
MOV.w &CSCTL7、R13
和.w #FLLUNLOCK0|FLLUNLOCK1、R13
Jnz 解锁 FLL

MOV.w #SELMS_DCOCLKDIV+SELA_REFOCLK、&CSCTL4

BIC.w #LOCKLPM5、PM5CTL0

BIS.b #BIT4+BIT4、&P1SEL0
BIS.w #UCSWRST、&UCA0CTLW0
BIS.w #UCSSEL_SMCLK、和 UCA0CTLW0

MOV.b #104、UCA0BR0
CLR.b 和 UCA0BR1
BIS.w #UCBRS0、&UCA0MCTLW
BIC.w #UCSWRST、&UCA0CTLW0
CLR.w RXData


BIS.w #UCRXIE、&UCA0IE
NOP
BIS.w #LPM3+GIE、SR
NOP

USC_ISR:
MOV.w &UCA0RXBUF、RXData
BIC.w #UCRXIFG、&UCA0IFG
XOR.b #BIT0、P1OUT
TI

常见的 INTVEC
org USCI_A0_Vector
DW USC_ISR
结束

只要我切换操纵杆并切换灯、我就可以传输它、但我会得到一些时髦的数据。 我尝试仅传输#0x01、但另一端的传输量为255 是否有关于如何解决此问题的建议?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我怀疑您实际上不是在发送0x01。

    > bit.w #0x03、TXData
    这是一个位测试、对 TXData 没有影响。 您可能需要类似的东西
    >mov.w #0x03、TXData ;在中间发送代码3

    未经请求:
    >CMP.w #0x1、&UCTXIFG
    这是比较 ROM (0x02)中的一个字来查看它是否为1、我很确定您不打算这样做。 我想您需要以下内容:
    >位 #UCTXIFG、UCA0IFG;Tx 可用吗?

    [编辑:更正了一些拼写错误]

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    是的、我仍在获取疯狂的数据。 今晚我会更乱、看看我是否能得到答案。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您是否修复了全部三个位?

    另一个建议:尝试发送 ASCII、而不是0x01-0x03、例如"1"、"2"、"3"(0x31、0x32、0x33)。 我经常会被某些具有非透明 UART 的器件捕获。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    已使用 Putty 进行内部测试。 完成所有更改后、您请求我。 我每秒发送3次。 但是、当我向上移动操纵杆控制器时、它会给我一些疯狂的奇怪线

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    如果您在"Send_Data"处断点、TXData 有什么值?

    我看到许多"存储器"(包括存储器映射寄存器)引用、这些引用上没有"&"。 IAR 对此比 CCS 更宽容吗?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我认为这是 HC05的一个问题。 数据在发送出去后会被打乱。 不确定原因、但仍在尝试找出原因。 我得到0x0031。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    代码工作正常。 发现一个 HC05是版本2、另一个是版本3。 不确定这是不是问题。 我只是在彼此之间更改了主器件和从器件状态。 现在、数据看起来很完美。 感谢所有的帮助!