请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号:MSP430FR2433 大家好、
目前使用 MSP430FR2433、我的目标是使用 UART 传输消息。 我处于该项目的开始阶段、因此我的当前目标是在同一 Launchpad 上的两个 UART 之间仅发送一条消息。 您将在代码下方找到、它包含硬件初始化(时钟、UART 等)。 但是、没有结果、Putty 似乎配置正确(波特、端口、流控制)在被置入串行模式时不会观察到任何内容。 很抱歉、代码的长度... 希望能得到一些帮助、非常感谢。
#include
#include "driverlib/MSP430FR2xx_4xx/driverlib.h"
#include
#include "C:/ti/ccsv8/tools/compiler/ti-cgt-msp430_18.1.3.LTS/include/string.h
#include "C:/ti/ccsv8/tools/compiler/ti-cgt-msp430_18.1.3.LTS/include/time.h
#include "C:/ti/ccsv8/tools/compiler/ti-cgt-msp430_18.1.3.LTS/include/stdio.h
#define DCOFREQ 8000000 //8MHz
#define TXLED BIT0
#define RXLED BIT6
#define MAX_STRBUF_SIZE 1024
void systemInit (void);
void initc (void);
void initEusci (void);void
eUSCI (void)
;void eUSCI (void);void eUSCI (void)
void UART_rxeString1 (char*);void UART_transmiteString (char*);bool rxStringReady;char transmitString[MAX_STRBUF_SIZE];char txString1[MAX_STRBUF_SIZE]={"ok"};// 0110 1111 01101011 volatile UINT32_t;char txString1
(main_trunt)=系统初始化1
(while trunt);/trunt (while trunt) 1 (intrunit/trunit/trunt) intrunch/trunt (intrunion 1)(intrunt
{
UART_transmitString1 (txString1);
for (i=100000;i>0; i--);
}
~void systemInit (void){//停止看门狗计时器 WDT_A_HOLD (WDT_A_base);printf ("系统初始化中的 Hello \n");//初始化时钟初始化();// LED 输出 P1DIR |= RXLED + TXLED;P1OUT &= 0x00;//禁用先前配置的 GPIO 电源阻抗 LPM5LPM0 =默认设置/ LPM0
//初始化 UART。
initEusci();
initEusci1();
//启用 gobal 中断
__enable_interrupt ();
}
void incs (void)
{
//初始化时钟
CS_initClockSignal (CS_SMCLK、CS_DCOCLKDIV_select、CS_clock_divider 1);
//出于演示目的,
将 initCs_initCockSignal (CS_SMCLK、CS_DCOCLKDIV0|配置为0
;void 1MxC1MHZ (0| UCC1MHZ) 0| UCC1 (0)
P1SEL1 &=~(BIT4 | BIT5);
//配置 UART
// software-dl.ti.com/.../index.html
// 115 200bps 该值取决于使用的发送器
EUSCI_A_UART_initParam param ={0};
param.selectClockSource = EUSCI_A_UART_CLOCKSOURCE_SMCLK;
param.clockReg Prescalar = 4;
param=1.85;
param.secondModReg = param.modalam;
param.param.param.param_a_uart_no_param.msborLsbartst
= eUSCI_A_uart_lSB_first;
param.numberofStopBits = eUSCI_A_uart_one_stop_bit;
param.uartMode = eUSCI_a_uart_mode;
param.oversam采样= eUSCI_uart_uart_uart_uart_uart_mode;param.oversam_uart_uart_uart_generation
if (STATUS_FAIL = EUSCI_A_UART_init (EUSCI_A0_BASE、¶m)
){
返回;
#EUSCI_A_UART_ENABLE (EUSCI_A0_BASE);
//中断
EUSCI_A_UART_clearInterrupt (EUSCI_A0_BASE、EUSCI_A_UART_RECEIVE_INTERRUPT);
//启用 USCI_A0 RX 中断 EUSCI_A_ENTI_RATI_ERSIR_
(USC_A_A1_ENTRIBRATE_ERSI_END_ENTRUCI_ERSION_ERSION_IN_ERSION_ERSION_ERSION_ERSION_ERSION_ERSION_ERSIR_
(#US_ENTRIP_A_)#US_A0)#US_ERSIR_ USC_A_A_A_ERSION_ERSIR_ER_ERSION_ERSION_ERSION_ERSION_ERSION_ERSION_ERSION_ERSION_ER_ERSION_ERSION_ERSI
#endif
{
printf ("i m before the switch\n");
switch (__even_in_range (UCA0IV、USCI_UART_UCTXCPTIFG))
{
printf ("i m in the switch\n");
USCI_NONE 案例:中断;
//运行 halt 的函数
USCI_UART_UCRXIFG 案例:
//读取缓冲区
UART_receiveString (UCA0RXBUF);
//写入缓冲区
UART_transmiteString (rxString);
中断;
案例 USCI_UART_UCTXIFG:中断;
案例 USCI_UART_UCSTTIFG:中断;
案例 USCI_UART_UCTXCPTIFG:中断;
默认值:break;
}
}void UART_receiveString (char data)
{
printf ("%c\n"、data);
bool rxInProgress = false;
unsigned int charCnt = 0;
if (!rxInProgress)//如果错误、则使用此条件启动中断
{
如果((data!='\n'))//如果它是一条新的线,定时器的值将更改为0。
{
rxInProgress = true;
charCnt = 0;
rxString[charCnt]=数据;
}
}
否则
{//进行中
charCnt++;
if ((数据!='\n'))
{
if (charCnt >= MAX_STRBUF_SIZE)//如果它要发送大于 MAX_STRBUF_SIZE 的长度来读取数据。
{
rxInProgress = false;
}
其他
{
rxString[charCnt]= data;//读取数据并将其写入表中
。}
}
其他
{
rxInProgress = false;
rxString[charCnt]='\0';
//字符串接收完成
rxStringReady = true;
}
}
void UART_transmitString (char *str)
{
int ii = 0;
for (ii = 0;ii < strlen (str);i++)
{
如果(str[i]!=0)
{
//发送字符
while (EUSCI_A_UART_queryStatusFlags (EUSCI_A0_BASE、EUSCI_A_UART_BUSY));
EUSCI_A_UART_transmitData (EUSCI_A0_BASE、str[i]);
}
}
// EUSCI 1
void initEusci1 (void){
//配置 UCA1TXD 和 UCA1RXD
P2SEL0 |= BIT6 | BIT5;
P2SEL1 &=~(BIT6 | BIT4);
//配置 UART
// software-dl.ti.com/.../index.html
EUSCI_A_UART_PARARAM initCLAM ={1}
param.selectClockSource
= param.secondModReg;EUSCI_param 4 =;UCC_param.param
param.param.param.param_a_uart_no_param.msborLsbartst
= eUSCI_A_uart_lSB_first;
param.numberofStopBits = eUSCI_A_uart_one_stop_bit;
param.uartMode = eUSCI_a_uart_mode;
param.oversam采样= eUSCI_uart_uart_uart_uart_uart_mode;param.oversam_uart_uart_uart_generation
if (STATUS_FAIL = EUSCI_A_UART_INIT (EUSCI_A1_BASE、¶m)
){
return;
}
eUSCI_A_UART_ENABLE (eUSCI_A1_base);
//不需要启用中断
}
void UART_transmiteString1 (char *str1)
{
int i1 = 0;
printf ("%d\n"、strlen (str1));
for (i1 = 0;i1 < strlen (str1); I1++)
{
if (str1[i1]!= 0)
{
//发送字符
while (EUSCI_A_UART_queryStatusFlags (EUSCI_A1_BASE、EUSCI_A_UART_BUSY));
EUSCI_A_UART_transmitData (EUSCI_A1_base、str1[i1]);
}
}
