MSP432库函数学习笔记-UART

目录

MSP432工作框图

UART初始化

UART使能

 UART数据传输

 UART休眠

UART状态查询

 UART中断使能

 UART中断状态查询和中断处理

UART字符串传输


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');
}


  • 4
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值