目录
MSP432工作框图
UART初始化
bool UART_initModule(uint32_t moduleInstance,const eUSCI_UART_Config *config);
//UART初始化
//! \param moduleInstance is the instance of the eUSCI A (UART) module.
//! Valid parameters vary from part to part, but can include:
//! - \b EUSCI_A0_BASE eUSCI A0基地址
//! - \b EUSCI_A1_BASE eUSCI A1基地址
//! - \b EUSCI_A2_BASE eUSCI A2基地址
//! - \b EUSCI_A3_BASE eUSCI A3基地址
typedef struct _eUSCI_eUSCI_UART_Config
{
uint_fast8_t selectClockSource; //UCSSELx寄存器,时钟源选择
uint_fast16_t clockPrescalar; //UCBRx寄存器,波特率时钟分频控制
uint_fast8_t firstModReg; //UCBRFx寄存器
uint_fast8_t secondModReg; //UCBRFx寄存器
uint_fast8_t parity; //UCPAR寄存器,选择奇偶校验
uint_fast16_t msborLsbFirst; //UCMSB寄存器,MSB(低地址存放高位字节)或LSB(反)选择
uint_fast16_t numberofStopBits; //UCSPB寄存器,停止位配置
uint_fast16_t uartMode; //UCMODEx寄存器,eUSCI_A 模式选择
uint_fast8_t overSampling;
} eUSCI_UART_Config;
//初始化结构体
//! \param selectClockSource selects Clock source. Valid values are时钟源选择
//! - \b EUSCI_A_UART_CLOCKSOURCE_SMCLK
//! - \b EUSCI_A_UART_CLOCKSOURCE_ACLK
//!clockPrescalar
//!firstModReg
//!secondModReg
//! \param parity is the desired parity. Valid values are
//! - \b EUSCI_A_UART_NO_PARITY [Default Value],
//! - \b EUSCI_A_UART_ODD_PARITY,
//! - \b EUSCI_A_UART_EVEN_PARITY
//! \param msborLsbFirst controls direction of receive and transmit shift
//! register. Valid values are
//! - \b EUSCI_A_UART_MSB_FIRST
//! - \b EUSCI_A_UART_LSB_FIRST [Default Value]
//! \param numberofStopBits indicates one/two STOP bits
//! Valid values are
//! - \b EUSCI_A_UART_ONE_STOP_BIT [Default Value]
//! - \b EUSCI_A_UART_TWO_STOP_BITS
//! \param uartMode selects the mode of operation
//! Valid values are
//! - \b EUSCI_A_UART_MODE [Default Value], UART模式
//! - \b EUSCI_A_UART_IDLE_LINE_MULTI_PROCESSOR_MODE, 空闲线路多处理器模式
//! - \b EUSCI_A_UART_ADDRESS_BIT_MULTI_PROCESSOR_MODE, 地址位多处理器模式
//! - \b EUSCI_A_UART_AUTOMATIC_BAUDRATE_DETECTION_MODE 具有自动波特率检测的UART模式
//! \param overSampling indicates low frequency or oversampling baud
//! generation
//! Valid values are
//! - \b EUSCI_A_UART_OVERSAMPLING_BAUDRATE_GENERATION
//! - \b EUSCI_A_UART_LOW_FREQUENCY_BAUDRATE_GENERATION
clockPrescalar,firstModReg,secondModReg和overSampling 四个参数可在参数生成自动生成配置
void UART_selectDeglitchTime(uint32_t moduleInstance,uint32_t deglitchTime);
//设置故障时间
//! \param deglitchTime is the selected deglitch time
//! Valid values are
//! - \b EUSCI_A_UART_DEGLITCH_TIME_2ns
//! - \b EUSCI_A_UART_DEGLITCH_TIME_50ns
//! - \b EUSCI_A_UART_DEGLITCH_TIME_100ns
//! - \b EUSCI_A_UART_DEGLITCH_TIME_200ns
UART使能
void UART_enableModule(uint32_t moduleInstance);
//使能UART模块
void UART_disableModule(uint32_t moduleInstance);
//禁用UART模块
//UCAxCTL1寄存器
UART数据传输
void UART_transmitData(uint32_t moduleInstance,uint_fast8_t transmitData);
//将数据放入传输数据寄存器,以开始传输,transmitData为待传输的数据
//UCAxTXBUF寄存器
uint8_t UART_receiveData(uint32_t moduleInstance);
//从接收数据寄存器读取一个字节数据
//UCAxRXBUF寄存器
void UART_transmitBreak(uint32_t moduleInstance);
//中断传输
//UCAxCTL1,UCAxTXBUF寄存器
void UART_transmitAddress(uint32_t moduleInstance,uint_fast8_t transmitAddress);
//根据选定的多处理器模式,传输下一个标记为地址的待传输字节
//UCAxCTL1,UCAxTXBUF寄存器
uint32_t UART_getReceiveBufferAddressForDMA(uint32_t moduleInstance);
//返回UART的DMA模块的RX缓冲区的地址。
uint32_t UART_getTransmitBufferAddressForDMA(uint32_t moduleInstance);
//返回UART的DMA模块的TX缓冲区的地址。
UART休眠
void UART_setDormant(uint32_t moduleInstance);
//设置UART为休眠模式
//UCAxCTL1寄存器
void UART_resetDormant(uint32_t moduleInstance);
//从休眠中重启UART
//UCDORM of \b UCAxCTL1寄存器
UART状态查询
uint_fast8_t UART_queryStatusFlags(uint32_t moduleInstance,uint_fast8_t mask);
//根据传入的标志返回状态
//UCAxSTAT寄存器
//! - \b EUSCI_A_UART_LISTEN_ENABLE
//! - \b EUSCI_A_UART_FRAMING_ERROR
//! - \b EUSCI_A_UART_OVERRUN_ERROR
//! - \b EUSCI_A_UART_PARITY_ERROR
//! - \b eUARTBREAK_DETECT
//! - \b EUSCI_A_UART_RECEIVE_ERROR
//! - \b EUSCI_A_UART_ADDRESS_RECEIVED
//! - \b EUSCI_A_UART_IDLELINE
//! - \b EUSCI_A_UART_BUSY
UART中断使能
void UART_enableInterrupt(uint32_t moduleInstance, uint_fast8_t mask);
//使能UART中断
void UART_disableInterrupt(uint32_t moduleInstance, uint_fast8_t mask);
//禁用UART中断
//UCAxIFG,UCAxIE,UCAxCTL1寄存器
//! The mask parameter is the logical OR of any of the following:
//! - \b EUSCI_A_UART_RECEIVE_INTERRUPT -Receive interrupt
//! - \b EUSCI_A_UART_TRANSMIT_INTERRUPT - Transmit interrupt
//! - \b EUSCI_A_UART_RECEIVE_ERRONEOUSCHAR_INTERRUPT - Receive erroneous-character
//! interrupt enable
//! - \b EUSCI_A_UART_BREAKCHAR_INTERRUPT - Receive break character interrupt enable
UART中断状态查询和中断处理
uint_fast8_t UART_getInterruptStatus(uint32_t moduleInstance,uint8_t mask);
//根据传入的标志返回中断状态
uint_fast8_t UART_getEnabledInterruptStatus(uint32_t moduleInstance);
//获取启用的UART中断的状态
void UART_clearInterruptFlag(uint32_t moduleInstance, uint_fast8_t mask);
//清除中断源,使其不再产生中断
//UCAxIFG寄存器
//! \param mask is the masked interrupt flag status to be returned.
//! Mask value is the logical OR of any of the following:
//! - \b EUSCI_A_UART_RECEIVE_INTERRUPT_FLAG
//! - \b EUSCI_A_UART_TRANSMIT_INTERRUPT_FLAG
//! - \b EUSCI_A_UART_STARTBIT_INTERRUPT_FLAG
//! - \b EUSCI_A_UART_TRANSMIT_COMPLETE_INTERRUPT_FLAG
void UART_registerInterrupt(uint32_t moduleInstance,void (*intHandler)(void));
//注册中断处理函数
void UART_unregisterInterrupt(uint32_t moduleInstance);
//注销中断处理函数
UART字符串传输
由于MSP432UART没有字符串传输的函数,我仿照STM32写了一个函数实测可用
void Uart_SendStr(uint8_t *str)
{
uint8_t i = 0;
do
{
UART_transmitData(EUSCI_A0_BASE, *(str + i));
i++;
} while (*(str + i) != '\0');
}