MSP-EXP430F5529LP开发板006-UART库函数

2024-06-12 19:32

本文主要是介绍MSP-EXP430F5529LP开发板006-UART库函数,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

串口是比较常用的开发中比较常用的部分了,这部分难点就是波特率的设置了,为此还特地下了篇英文手册,硬着头皮看了下,学会如何配置了,下面就是串口初始化部分

void myuart_init()
{//P3.3,4 = USCI_A0 TXD/RXDGPIO_setAsPeripheralModuleFunctionInputPin(GPIO_PORT_P3,GPIO_PIN3 + GPIO_PIN4);//Baudrate = 9600, clock freq = 4MHz//UCBRx = 26, UCBRFx = 1, UCBRSx = 0, UCOS16 = 1USCI_A_UART_initParam param = {0};param.selectClockSource = USCI_A_UART_CLOCKSOURCE_SMCLK;param.clockPrescalar = 26;param.firstModReg = 1;param.secondModReg = 0;param.parity = USCI_A_UART_NO_PARITY;param.msborLsbFirst = USCI_A_UART_LSB_FIRST;param.numberofStopBits = USCI_A_UART_ONE_STOP_BIT;param.uartMode = USCI_A_UART_MODE;param.overSampling = USCI_A_UART_OVERSAMPLING_BAUDRATE_GENERATION;if (STATUS_FAIL == USCI_A_UART_init(USCI_A0_BASE, &param)){return;}//Enable UART module for operationUSCI_A_UART_enable(USCI_A0_BASE);//Enable Receive InterruptUSCI_A_UART_clearInterrupt(USCI_A0_BASE,USCI_A_UART_RECEIVE_INTERRUPT);USCI_A_UART_enableInterrupt(USCI_A0_BASE,USCI_A_UART_RECEIVE_INTERRUPT);
}

看到这一部分大家就应该比较眼熟了,有点类似32的uart初始化,但不同的是波特率部分,需要根据时钟源进行计算。这里我选择的是SMCLK,时钟配置沿袭了上一篇文章的配置,也就是SMCLK为4MHz。那么具体怎么设置呢?这里就只能参看英文手册了,这一部分截图如下

大体思路就是先计算N,然后根据N值进行后面的设置,N大于等于16可以设置为Oversampling,UCOS16 = 1;N小于16可以设置为Low-Frequency,UCOS16 = 0。UCBR, UCBRFx , UCBRSx三个寄存器可以按上述进行计算,但是TI为我们提供了不同时钟源下的取值,还是比较人性化的。下面截图部分,可以很轻松找到4MHz下9600bps的对应设置

整体代码在下面

//*****************************************************************************
#include "driverlib.h"
//*****************************************************************************
//
//Target frequency for MCLK in kHz
//
//*****************************************************************************
#define UCS_MCLK_DESIRED_FREQUENCY_IN_KHZ   24000//*****************************************************************************
//
//MCLK/FLLRef Ratio
//
//*****************************************************************************
#define UCS_MCLK_FLLREF_RATIO   6//*****************************************************************************
//
//Variable to store current Clock values
//
//*****************************************************************************
uint32_t clockValue = 0;//*****************************************************************************
//
//Variable to store status of Oscillator fault flags
//
//*****************************************************************************
//*****************************************************************************
//
//XT1 Crystal Frequency being used
//
//*****************************************************************************
#define UCS_XT1_CRYSTAL_FREQUENCY    32768//*****************************************************************************
//
//XT2 Crystal Frequency being used
//
//*****************************************************************************
#define UCS_XT2_CRYSTAL_FREQUENCY   4000000
//*****************************************************************************
//
//Desired Timeout for XT1 initialization
//
//*****************************************************************************
#define UCS_XT1_TIMEOUT 50000
#define TIMER_PERIOD 399
#define DUTY_CYCLE  100
#define UCS_XT2_TIMEOUT 50000
uint16_t status;
uint8_t returnValue = 0;
void myclock_init()
{//Set VCore = 1 for 12MHz clockPMM_setVCore(PMM_CORE_LEVEL_1);//主频提高后,VCore电压也需要随之配置//Initializes the XT1 and XT2 crystal frequencies being usedUCS_setExternalClockSource(UCS_XT1_CRYSTAL_FREQUENCY,UCS_XT2_CRYSTAL_FREQUENCY);//设置外部时钟源的频率,没什么实际设定//Initialize XT1. Returns STATUS_SUCCESS if initializes successfullyGPIO_setAsPeripheralModuleFunctionInputPin(GPIO_PORT_P5,GPIO_PIN4 + GPIO_PIN5);//XT1口不作为普通IOreturnValue = UCS_turnOnLFXT1WithTimeout(UCS_XT1_DRIVE_0,UCS_XCAP_3,UCS_XT1_TIMEOUT);//启动XT1//Startup HF XT2 crystal Port select XT2GPIO_setAsPeripheralModuleFunctionInputPin(GPIO_PORT_P5,GPIO_PIN2 + GPIO_PIN3);//XT2口不作为普通IO//Initialize XT2. Returns STATUS_SUCCESS if initializes successfullyreturnValue = UCS_turnOnXT2WithTimeout(UCS_XT2_DRIVE_4MHZ_8MHZ,UCS_XT2_TIMEOUT);//启动XT2//Set DCO FLL reference = REFOUCS_initClockSignal(UCS_FLLREF,UCS_XT2CLK_SELECT,UCS_CLOCK_DIVIDER_1);//XT2作为FLL参考//Set Ratio and Desired MCLK Frequency  and initialize DCOUCS_initFLLSettle(UCS_MCLK_DESIRED_FREQUENCY_IN_KHZ,UCS_MCLK_FLLREF_RATIO);//MCLK设置为24MHz//Set ACLK = REFOUCS_initClockSignal(UCS_ACLK,UCS_REFOCLK_SELECT,UCS_CLOCK_DIVIDER_1);//ACLK设置为32.768kHzUCS_initClockSignal(UCS_SMCLK,UCS_XT2CLK_SELECT,UCS_CLOCK_DIVIDER_1);//SMCLK设置为4MHz
}
void mypwm_init()
{//P2.0 as PWM outputGPIO_setAsPeripheralModuleFunctionOutputPin(GPIO_PORT_P2,GPIO_PIN0);//Generate PWM - Timer runs in Up modeTimer_A_outputPWMParam param = {0};param.clockSource = TIMER_A_CLOCKSOURCE_SMCLK;param.clockSourceDivider = TIMER_A_CLOCKSOURCE_DIVIDER_1;param.timerPeriod = TIMER_PERIOD;param.compareRegister = TIMER_A_CAPTURECOMPARE_REGISTER_1;param.compareOutputMode = TIMER_A_OUTPUTMODE_RESET_SET;param.dutyCycle = DUTY_CYCLE;Timer_A_outputPWM(TIMER_A1_BASE, &param);
}
void myuart_init()
{//P3.3,4 = USCI_A0 TXD/RXDGPIO_setAsPeripheralModuleFunctionInputPin(GPIO_PORT_P3,GPIO_PIN3 + GPIO_PIN4);//Baudrate = 9600, clock freq = 4MHz//UCBRx = 26, UCBRFx = 1, UCBRSx = 0, UCOS16 = 1USCI_A_UART_initParam param = {0};param.selectClockSource = USCI_A_UART_CLOCKSOURCE_SMCLK;param.clockPrescalar = 26;param.firstModReg = 1;param.secondModReg = 0;param.parity = USCI_A_UART_NO_PARITY;param.msborLsbFirst = USCI_A_UART_LSB_FIRST;param.numberofStopBits = USCI_A_UART_ONE_STOP_BIT;param.uartMode = USCI_A_UART_MODE;param.overSampling = USCI_A_UART_OVERSAMPLING_BAUDRATE_GENERATION;if (STATUS_FAIL == USCI_A_UART_init(USCI_A0_BASE, &param)){return;}//Enable UART module for operationUSCI_A_UART_enable(USCI_A0_BASE);//Enable Receive InterruptUSCI_A_UART_clearInterrupt(USCI_A0_BASE,USCI_A_UART_RECEIVE_INTERRUPT);USCI_A_UART_enableInterrupt(USCI_A0_BASE,USCI_A_UART_RECEIVE_INTERRUPT);
}
unsigned int i;
uint8_t transmitData = 0x00;
uint8_t receivedData = 0x00;
bool send_ready=0;
void main (void)
{//Stop WDTWDT_A_hold(WDT_A_BASE);   myclock_init();mypwm_init();myuart_init();//Verify if the Clock settings are as expectedclockValue = UCS_getMCLK();clockValue = UCS_getACLK();clockValue = UCS_getSMCLK();// Enable global interrupt__bis_SR_register(GIE);//Loop in placewhile (1){}
}
//******************************************************************************
//
//This is the USCI_A0 interrupt vector service routine.
//
//******************************************************************************
#if defined(__TI_COMPILER_VERSION__) || defined(__IAR_SYSTEMS_ICC__)
#pragma vector=USCI_A0_VECTOR
__interrupt
#elif defined(__GNUC__)
__attribute__((interrupt(USCI_A0_VECTOR)))
#endif
void USCI_A0_ISR (void)
{switch (__even_in_range(UCA0IV,4)){//Vector 2 - RXIFGcase 2: receivedData = USCI_A_UART_receiveData(USCI_A0_BASE);USCI_A_UART_transmitData(USCI_A0_BASE,receivedData);break;default: break;}
}

实现上位机向430发送数据,原封不动返回

这篇关于MSP-EXP430F5529LP开发板006-UART库函数的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1055126

相关文章

QT移植到RK3568开发板的方法步骤

《QT移植到RK3568开发板的方法步骤》本文主要介绍了QT移植到RK3568开发板的方法步骤,文中通过图文示例介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录前言一、获取SDK1. 安装依赖2. 获取SDK资源包3. SDK工程目录介绍4. 获取补丁包二

开发板NFS挂载文件目录

文章目录 序NFS1. 安装 NFS 服务器和客户端在服务器上(NFS 服务器端)在客户端上(NFS 客户端) 2. 配置 NFS 服务器创建共享目录编辑 `/etc/exports` 文件启动 NFS 服务 3. 在客户端挂载 NFS 共享创建挂载点挂载 NFS 共享验证挂载 4. 设置开机自动挂载5. 解决权限问题 序 本节主要实现虚拟机(服务器)与开发板(客户端)通过N

安卓开发板_联发科MTK开发评估套件串口调试

串口调试 如果正在进行lk(little kernel ) 或内核开发,USB 串口适配器( USB 转串口 TTL 适配器的简称)对于检查系统启动日志非常有用,特别是在没有图形桌面显示的情况下。 1.选购适配器 常用的许多 USB 转串口的适配器,按芯片来分,有以下几种: CH340PL2303CP2104FT232 一般来说,采用 CH340 芯片的适配器,性能比较稳定,价

整理的经典面试题及各种库函数的自己实现

进程间通信方式 管道(有名管道,无名管道),共享内存,消息队列,信号量,socket通信 线程同步方式 临界区:通过对多线程的串行化来访问公共资源或一段代码,速度快,适合控制数据访问 互斥量:为协调共同对一个共享资源的单独访问而设计 信号量(PV操作):为控制一个具有有限数量用户资源而设计 事件:用来通知线程有一些事件已 进程和线程的区别 资源:进程是拥有资源的一个独立单位,线程是

正点原子阿尔法ARM开发板-IMX6ULL(二)——介绍情况以及汇编

文章目录 一、裸机开发(21个)二、嵌入式Linux驱动例程三、汇编3.1 处理器内部数据传输指令3.2 存储器访问指令3.3 压栈和出栈指令3.4 跳转指令3.5 算术运算指令3.6 逻辑运算指令 一、裸机开发(21个) 二、嵌入式Linux驱动例程 三、汇编 我们在进行嵌入式 Linux 开发的时候是绝对要掌握基本的 ARM 汇编,因为 Cortex-A 芯片一

笔记 14 : 彭老师课本第 8 章, UART : 寄存器介绍 ,

(99) 继续介绍 uart 的关于通道的 一整套 寄存器, UCON 等: ++ 接着介绍寄存器 UTRSTAT : ++ 接着介绍读写数据的寄存器: ++ 设置 uart 的波特率,有关的寄存器: ++ (100) (101) 谢谢

龙芯L2K0300开发板综合测试

CPU 查看cpu版本信息 cat /proc/cpuinfo 可以看到cpu是64位的LoongsonArch架构 stress压力测试结果 RAM 久久派板载512MB DDR4-2666内存,查看内存信息 cat /proc/meminfo 可以用memtester进行内存性能测试 memtester <size> <times> memtester测试结果

实操在聆思CSK6大模型开发板的英文评测SDK中自定义添加单词、短语、句子资源

引言 英文评测示例通过对用户语音输入的英文单词进行精准识别,提供 单词、短语、句子 三种类型,用户在选择好类型后,可根据屏幕上的提示进行语音输入,评测算法将对输入的英文语音进行精准识别,并对单词的发音、错读、漏读、多读等方面进行评估。 本文将详细介绍在聆思CSK6大模型语音视觉开发板上,如何替换英文评测示例中的单词、短语和句子,从而让您有更好的AI应用体验。 ·· 获取英文评测SDK 部

【免费分享】嵌入式Linux开发板【入门+项目,应用+底层】资料包一网打尽,附教程/视频/源码...

想要深入学习嵌入式Linux开发吗?现在机会来了!我们为初学者们准备了一份全面的资料包,包括原理图、教程、课件、视频、项目、源码等,所有资料全部免费领取,课程视频可试看(购买后看完整版),让你从零开始,快速掌握嵌入式Linux开发技能。 后台私信小雯老师,回复“嵌入式Linux”即可获取开发板完整资料包。 一、资料内容 开发教程:9大教程,覆盖应用层+底层开发 《Linux基础

【Rust】006-Rust 枚举与`match`、`if let`、`let else`

【Rust】006-Rust 枚举与match、if let、let else 文章目录 【Rust】006-Rust 枚举与`match`、`if let`、`let else`一、简介二、使用场景三、基本使用1、定义枚举2、使用枚举 四、功能详解1、带数据的枚举2、使用`match`进行模式匹配3、使用`if let`简化特定变体的处理4、使用`let else`处理带条件的匹配 五、