MSP430g2553串口通信

合集下载

MSP430 g2553,中文资料

MSP430 g2553,中文资料

引导加 载器 (BSL)
嵌入式 仿真模
块 (EEM)
1
1
1
1
1
1
1
1
1
1
表 1. 提供的选项(1)(2) (接下页)
ZHCS178E – APRIL 2011 – REVISED JANUARY 2012
闪存 (KB)
RAM (B)
Timer_A
COMP_A+ 通道
10 通道 ADC
USCI A0/B0
P2.0/TA1.0 8 P2.1/TA1.1 9 P2.2/TA1.1 10
N20 PW20 (TOP VIEW)
20 DVSS 19 XIN/P2.6/TA0.1 18 XOUT/P2.7 17 TEST/SBWTCK 16 RST/NMI/SBWTDIO 15 P1.7/CAOUT/UCB0SIMO/UCB0SDA/A7/CA7/TDO/TDI 14 P1.6/TA0.1/UCB0SOMI/UCB0SCL/A6/CA6/TDI/TCLK 13 P2.5/TA1.2 12 P2.4/TA1.2 11 P2.3/TA1.0
28 引脚 24 TSSOP 封

20 引脚 16 TSSOP 封

16
20 引脚 PDIP 封装
24
32 引脚 QFN 封装
28 引脚 24 TSSOP 封

20 引脚 16 TSSOP 封

16
20 引脚 PDIP 封装
24
32 引脚 QFN 封装
28 引脚 24 TSSOP 封

20 引脚 16 TSSOP 封
• 通用串行通信接口 (USCI) – 支持自动波特率检测的增强型通用异步收发器 (UART) – IrDA 编码器和解码器 – 同步 SPI – I2C™

msp430g2553_UART

msp430g2553_UART

#include "msp430g2553.h"#include "UART.h"#include "N5110.h"#define TXRX_FIFO 1#define AddressUse 1#ifndef uchar#define uchar unsigned char#endif#ifndef uint#define uint unsigned int#endifuchar get_bug = 0;/****************************************************************延时***************************************************************/ void UART_delay(uint x){uint a, b;for(a=x; a>0; a--)for(b=110; b>0; b--);}/***************************************************************** *名称:UART_Set()*功能:UART串口设置*入口参数:baud: 波特率1200 2400 4800 9600(默认) 19200 38400 57600 * mctl: 波特率修整* data: 数据位,8:8位,7:7位,默认8位* jiouwei: 奇偶位,'n':无(默认),'o':奇校验,'e':偶校验* stop: 停止位,2:2位停止位,其他均为默认的1位* R_T: 收发模式,1:收;2:发;3:收发*出口参数:无*使用范例:UART_Set(9600,2,8,'n',1,3)*****************************************************************/ void UART_Set(uint baud,uchar mctl,uchar data,char jiouwei,uchar stop,uchar R_T) {UCA0CTL1 |=UCSWRST; //软件复位if(baud<=9600){UCA0CTL1 |= UCSSEL_1; //ACLK}{UCA0CTL1 |= UCSSEL_2; //SMCLK}switch(baud){case 1200: UCA0BR0 = 0X1B;//1200波特率//波特率计算UCA0BR1 = 0X6B; //波特率=BRCLK/N=(UBR+(M7+M6+M5+M4+M3+M2+M1+M0)/8)break; //例如:BRCLK=8MHz,要产生BITCLK=115200Hz,分频器的分频系数为8000 / 115.2 =69.44444444case 2400: UCA0BR0 = 0X0D;//2400波特率//所以设置分频器的计数值为69。

MSP430G2553串行通信UART和SPI

MSP430G2553串行通信UART和SPI

通信原理
• 自编通讯协议的效率不高,会有 bug。成熟的通讯 协议都是人类集体智慧的结晶。
• 不是通用协议,不能与“别人”进行通信。协议这 个东西,和霸王条款差不多。
• 成熟的通信协议有相应的硬件支持,可以在通信时 减轻 CPU 的负担,增强性能。
UART
UART 原理
• UART
– UART( Universal Asynchronous Receiver/ Transmitter)是通用异步收发器的缩写,一般 称为串口。由于不需要时钟线,且为全双工工 作,所以 UART 有两根数据线,发送 Tx 和接 收Rx。
• SOMI 是 Slave output Master input 的缩写,如果 设备被设定为主机,那么这就是输入口。如果设备 被设定为从机,这个口就是输出口。这与 UART 的 Tx 和 Rx 方向恒定相不同。
• SIMO 是 Slave input Master Output 的缩写。 • STE 是 Slave Transmit Enable 的缩写。
• 需规定主机从机,同步时钟由主机控制。
通信原理
– 具体应用
• 全双工时,往往不宜多机对等的通信,最多是 1 主 多从(除非给每个主机增加使能控制线)。
• 而半双工时,则很容易“并联”成多机通信, 通过 总线仲裁和地址广播等办法来实现任意设备之间的 通信。
通信原理
• 通信协议
– 简单说,就是通信的双方要约定 1、0 序列代 表什么含义,就像可以用“三长两短”代表危 险一样。如果我们是自己使用两片单片机进行 通信,那么我们爱怎么规定数据流的含义就怎 么规定,谁也管不着。但是,自定义的通讯协 议有几个缺点。
河南工业大学
MSP430串行通信

电设工作小结之——MSP430G2553学习笔记—2

电设工作小结之——MSP430G2553学习笔记—2

电设工作小结之——MSP430G2553学习笔记——2接上一篇:(四),ADC101,ADC10是十位的AD,在g2553上有A0~A7八个可以外接的AD通道,A10接到片上的温度传感器上,其他的通道都接在内部的VCC或GND上。

因为是10为的AD所以计算公式如下:2 ,ADC参考电压的选择:ADC的参考电压可以为:由ADC控制寄存器0 ADC10CTL0控制。

但是要提高ADC的精度的话,尽量不要用内部的参考电压,最好外接一个比较稳定的电压作为参考电压,因为内部的产生的参考电压不是特别稳定或精度不是特别的高。

例如我在使用时遇到的情况如下:Vref设为2.5V 但实际的值大概为2.475V,选择VCC VSS作为参考,用电压表测得大概为3.58V 还是不小的偏差的。

另外,在有可能的情况下,尽量采用较大的VR+和VR-,以减小纹波对采样结果的影响。

3,ADC10的采样方式有:单通道单次采样,单通道多次采样,多通道单次采样,多通道多次采样。

4,DTC:因为ADC10只有一个采样结果存储寄存器ADC10MEM,所以除了在单通道单次采样的模式下,其他的三个模式都必须使用DCT,否则转换结果会不停地被新的结果给覆盖。

DTC是转换结果传送控制,也就是转换结果可以不用CPU的干预,就可以自动地存储在指定的存储空间内。

使用这种方式转换速度快,访问方便,适用于高速采样模式中。

DTC的使用可以从下面的例子中很容易看明白:#include <msp430g2553.h>#include "ser_12864.h"uchar s1[]={"DTC:"};uchar s2[]={"2_cha_2_time_DTC"};void ADC_init(){ADC10CTL1 = CONSEQ_3 + INCH_1; // 2通道多次转换, 最大转换通道为A1ADC10CTL0 = ADC10SHT_2 + MSC + ADC10ON + ADC10IE; // ADC10ON, interrupt enabl 参考电压选默认值VCC和VSS//采样保持时间为16 x ADC10CLKs,ADC内核开,中断使能 MSC多次转换选择开//如果MSC置位,则第一次开始转换时需要触发源触发一次,以后的转换会自动进行中断使能//使用DTC时,当一个块传送结束,产生中断//数据传送控制寄存器0 ADC10DTC0设置为默认模式:单传送块模式,单块传送完停止 ADC10DTC1 = 0x04; //数据传送控制寄存器1 4 conversions 定义在每块的传送数目一共采样4次所以单块传送4次//以后就停止了传送因为是两通道的,所以是每个通道采样数据传送2次ADC10AE0 |= BIT0+BIT1; // P1.0 P1.1 ADC option select 使能模拟输入脚A0 A1//不知道为什么,当P10 P11都悬空时,采样值不同,用电压表测得悬空电压不同,但是当都接上采样源的时候,//采样是相同的}void main(void){uint adc_sample[8]={0}; //存储ADC序列采样结果WDTCTL = WDTPW+WDTHOLD;BCSCTL1 = CALBC1_12MHZ; //设定cpu时钟DCO频率为12MHzDCOCTL = CALDCO_12MHZ;P2DIR |=BIT3+BIT4; //液晶的两条线init_lcd();ADC_init();wr_string(0,0,s1);wr_string(0,3,s2);for (;;){ADC10CTL0 &= ~ENC; //ADC不使能其实这句话可以放在紧接着CPU唤醒之后的,因为CPU唤醒了,说明我们想要的//转换数据传送完成了,如果ADC继续转换,那么转换结果也不再传输,是无用的。

MSP430单片机串口通信详解

MSP430单片机串口通信详解

MSP430单片机串口通信详解#include&quot;msp430G2553.h&quot;#include &quot;in430.h&quot;void UartPutchar(unsigned char c);unsigned char UartGetchar();unsigned char temp=0;unsigned char number[2]={0};void main( void ){WDTCTL = WDTPW + WDTHOLD; // Stop WDTBCSCTL1 = CALBC1_1MHZ; // Set DCODCOCTL = CALDCO_1MHZ;P1DIR|=BIT6;P1OUT&=~BIT6;P1SEL = BIT1 + BIT2; // P1.1为 RXD, P1.2为TXD P1SEL2 = BIT1 + BIT2; // P1.1为 RXD, P1.2为TXDUCA0CTL1 |= UCSSEL_2; // 选择时钟BRCLKUCA0BR0 = 106; // 1MHz 9600UCA0BR1 = 0; // 1MHz 9600UCA0MCTL = UCBRS2 + UCBRS0; // 波特率=BRCLK/(UBR+(M7+...0)/8)UCA0CTL1 &= ~UCSWRST;// 初始化顺序:SWRST=1设置串口,然后设置SWRST=0,最后设置相应中断IE2 |= UCA0RXIE; // 使能接收中断while(1){//UartPutchar(9);// display_int(temp,0);__delay_cycles(10000);}}/**********************************UART接收中断*************************/#pragma vector=USCIAB0RX_VECTOR__interrupt void USCI0RX_ISR(void){//while (!(IFG2&UCA0TXIFG)); // 等待发送完成 //UCA0TXBUF = UCA0RXBUF; // TX ->; RXed charactertemp=UCA0RXBUF;}/******************************UART发送字节函数*************************/void UartPutchar(unsigned char c){while(!(IFG2 & UCA0TXIFG)); //待发送为空UCA0TXBUF=c;IFG2 &=~UCA0RXIFG;}/*********************************UART接收字节数据******************/unsigned char UartGetchar(){unsigned char c;while(!(IFG2 & UCA0RXIFG)); //等待接收完成c=UCA0RXBUF;IFG2 &=~UCA0TXIFG;return c;}/******智能控制工作室*******/MSP430g2553串口通信MSP430的不同型号,其串行通讯工作模式是一样的。

MSP430G2553的UART与SPI应用

MSP430G2553的UART与SPI应用
新被允许。而接收和发送允许标志URXE和
UTXE不会因SWRST 而更改。
ME1 |= UTXE0 + URXE0 //使能 USART0 TXD/RXD模块USART中特有的
使能配置。
IE1 |= URXIE0 //使能USART0 接收中断
10 P2.2
通用I/O 口、Timer1_A捕获CCI1B输入比较Out1输出
11 P2.3
通用I/O 口、Timer1_A捕获CCI0B输入比较Out0输出
12 P2.4
通用I/O 口、Timer1_A捕获CCI2A输入比较Out2输出
U0CTL |= CHAR; // 配置控制寄存器数据类型为8位。
U0TCTL |= SSEL0 // 选择时钟UCLK= ACLK。
U0BR0 = 0x45 // 分频系数的高8位8MHz 时钟下波特率为115200
(CPHA) 控制着两个 SPI 设备间何时数据交换以及何时对接收到的数据进行采样, 来保
证交换(Data Exchanges)
SPI 设备间的数据传输之所以又被称为数据交换, 是因为 SPI 协议规定一个 SPI
SPI 物理模块最终失效. 因此, 在程序中一般都会在 SPI 传输完数据后, 去读取 SPI 设
备里的数据, 即使这些数据(Dummy Data)在我们的程序里是无用的.
3、 工作机制
3.1. 概述
上图只是对 SPI 设备间通信的一个简单的描述, 下面就来解释一下图中所示的几个
测试数据输入或测试时钟输入
15 P1.7
通用I/O 口、ADC10模拟输入A7、Comparator_A+CA7输入、图

msp430g2553串口通信

msp430g2553串口通信

MSP430g2553串口通信MSP430的不同型号,其串行通讯工作模式是一样的。

以MSP430G2553为例进行说明。

MSP430G2553是20个引脚的16位单片机。

具有内置的16位定时器、16k 的FLASH 和512B 的RAM ,以及一个通用型模拟比较器以及采用通用串行通信接口的内置通信能力。

此外还具有一个10位的模数(A/D)转换器。

其引脚排布如图1.1所示。

其功能表如表1.1所示。

串行通讯模块主要由三个部分组成:波特率生成部分、发送控制器以及接收控制器。

如图1.2所示。

一、UART 模式在异步模式下,接收器自身实现帧的同步,外部的通讯设备并不使用这一时钟。

波特率的产生是在本地完成的。

异步帧格式由1个起始位、7或8个数据位、校验位(奇/偶/无)、1个地址位、和1或2个停止位。

一般最小帧为9个位,最大为13位。

图1.2 串行通讯模块内部结构图图1.1 MSP430G2553引脚图(一)UART的初始化单片机工作的时钟源来自内部三个时钟或者外部输入时钟,由SSEL1、SSEL0,以决定最终进入模块的时钟信号BRCLK的频率。

所以配置串行通讯的第一步就是选择时钟。

通过选择时钟源和波特率寄存器的数据来确定位周期。

所以波特率的配置是串行通讯中最重要的一部分。

波特率设置用三个寄存器实现:UxBR0(选择控制器0):波特率发生器分频系数低8位。

UxBR1(选择控制器1):波特率发生器分频系数高8位。

UxMCTL 数据传输的格式,以及数据传输的模式是通过配置控制寄存器UCTL来进行设置。

接收控制部分和发送控制部分。

首先需要串行口进行配置、使能以及开启中断。

串口接收数据一般采用中断方式,发送数据采用主动发送。

当接收到一个完整的数据,产生一个信号:URXIFG0=1(类似于51单片机的接收中断标志位),表示接收完整的数据。

当数据正在发送中,UTXIFG0=1,此时不能再发送数据,必须等当前数据发送完毕(UTXIFG0=0)才能进行发送。

基于MSP430G2553的SPI串行协议

基于MSP430G2553的SPI串行协议

基于MSP430G2553的SPI串行协议一、概述.SPI, Serial Perripheral Interface, 串行外围设备接口, 是Motorola 公司推出的一种同步串行接口技术. SPI 总线在物理上是通过接在外围设备微控制器(PICmicro) 上面的微处理控制单元(MCU) 上叫作同步串行端口(Synchronous Serial Port) 的模块(Module)来实现的, 它允许MCU 以全双工的同步串行方式, 与各种外围设备进行高速数据通信.SPI 主要应用在EEPROM, Flash, 实时时钟(RTC), 数模转换器(ADC), 数字信号处理器(DSP) 以及数字信号解码器之间. 它在芯片中只占用四根管脚(Pin) 用来控制以及数据传输, 节约了芯片的pin 数目, 同时为PCB 在布局上节省了空间. 正是出于这种简单易用的特性, 现在越来越多的芯片上都集成了SPI技术.二、特点1. 采用主-从模式(Master-Slave) 的控制方式SPI 规定了两个SPI 设备之间通信必须由主设备(Master) 来控制次设备(Slave). 一个Master 设备可以通过提供Clock 以及对Slave 设备进行片选(Slave Select) 来控制多个Slave 设备, SPI 协议还规定Slave 设备的Clock 由Master 设备通过SCK 管脚提供给Slave 设备, Slave 设备本身不能产生或控制Clock, 没有Clock 则Slave 设备不能正常工作.2. 采用同步方式(Synchronous)传输数据Master 设备会根据将要交换的数据来产生相应的时钟脉冲(Clock Pulse), 时钟脉冲组成了时钟信号(Clock Signal) , 时钟信号通过时钟极性(CPOL) 和时钟相位(CPHA) 控制着两个SPI 设备间何时数据交换以及何时对接收到的数据进行采样, 来保证数据在两个设备之间是同步传输的.3. 数据交换(Data Exchanges)SPI 设备间的数据传输之所以又被称为数据交换, 是因为SPI 协议规定一个SPI 设备不能在数据通信过程中仅仅只充当一个"发送者(Transmitter)" 或者"接收者(Receiver)". 在每个Clock 周期内, SPI 设备都会发送并接收一个bit 大小的数据, 相当于该设备有一个bit 大小的数据被交换了.一个Slave 设备要想能够接收到Master 发过来的控制信号, 必须在此之前能够被Master 设备进行访问(Access). 所以, Master 设备必须首先通过SS/CS pin 对Slave 设备进行片选, 把想要访问的Slave 设备选上.在数据传输的过程中, 每次接收到的数据必须在下一次数据传输之前被采样. 如果之前接收到的数据没有被读取, 那么这些已经接收完成的数据将有可能会被丢弃, 导致SPI 物理模块最终失效.因此, 在程序中一般都会在SPI 传输完数据后, 去读取SPI 设备里的数据, 即使这些数据(Dummy Data)在我们的程序里是无用的.三、工作机制1. 概述上图只是对SPI 设备间通信的一个简单的描述, 下面就来解释一下图中所示的几个组件(Module):SSPBUF, Synchronous Serial Port Buffer, 泛指SPI 设备里面的内部缓冲区, 一般在物理上是以FIFO 的形式, 保存传输过程中的临时数据;SSPSR, Synchronous Serial Port Register, 泛指SPI 设备里面的移位寄存器(Shift Regitser), 它的作用是根据设置好的数据位宽(bit-width) 把数据移入或者移出SSPBUF;Controller, 泛指SPI 设备里面的控制寄存器, 可以通过配置它们来设置SPI 总线的传输模式.通常情况下, 我们只需要对上图所描述的四个管脚(pin) 进行编程即可控制整个SPI 设备之间的数据通信:SCK, Serial Clock, 主要的作用是Master 设备往Slave 设备传输时钟信号, 控制数据交换的时机以及速率;SS/CS, Slave Select/Chip Select, 用于Master 设备片选Slave 设备, 使被选中的Slave 设备能够被Master 设备所访问;SDO/MOSI, Serial Data Output/Master Out Slave In, 在Master 上面也被称为Tx-Channel, 作为数据的出口, 主要用于SPI 设备发送数据;SDI/MISO, Serial Data Input/Master In Slave Out, 在Master 上面也被称为Rx-Channel, 作为数据的入口, 主要用于SPI 设备接收数据;SPI 设备在进行通信的过程中, Master 设备和Slave 设备之间会产生一个数据链路回环(Data Loop), 就像上图所画的那样, 通过SDO 和SDI 管脚, SSPSR 控制数据移入移出SSPBUF, Controller 确定SPI 总线的通信模式, SCK 传输时钟信号.2. Timing.上图通过Master 设备与Slave 设备之间交换1 Byte 数据来说明SPI 协议的工作机制.首先, 在这里解释一下两个概念:CPOL: 时钟极性, 表示SPI 在空闲时, 时钟信号是高电平还是低电平. 若CPOL 被设为1, 那么该设备在空闲时SCK 管脚下的时钟信号为高电平. 当CPOL 被设为0 时则正好相反.CPHA: 时钟相位, 表示SPI 设备是在SCK 管脚上的时钟信号变为上升沿时触发数据采样, 还是在时钟信号变为下降沿时触发数据采样.若CPHA 被设置为1, 则SPI 设备在时钟信号变为下降沿时触发数据采样, 在上升沿时发送数据. 当CPHA 被设为0 时也正好相反.上图里的"Mode 1, 1" 说明了本例所使用的SPI 数据传输模式被设置成CPOL = 1, CPHA = 1. 这样, 在一个Clock 周期内, 每个单独的SPI 设备都能以全双工(Full-Duplex) 的方式, 同时发送和接收1 bit 数据, 即相当于交换了1 bit 大小的数据. 如果SPI 总线的Channel-Width 被设置成Byte, 表示SPI 总线上每次数据传输的最小单位为Byte, 那么挂载在该SPI 总线的设备每次数据传输的过程至少需要8 个Clock 周期(忽略设备的物理延迟). 因此, SPI 总线的频率越快, Clock 周期越短, 则SPI 设备间数据交换的速率就越快.3. SSPSR.SSPSR 是SPI 设备内部的移位寄存器(Shift Register).它的主要作用是根据SPI 时钟信号状态, 往SSPBUF 里移入或者移出数据, 每次移动的数据大小由Bus-Width 以及Channel-Width 所决定.Bus-Width 的作用是指定地址总线到Master 设备之间数据传输的单位.例如, 我们想要往Master 设备里面的SSPBUF 写入16 Byte 大小的数据: 首先, 给Master 设备的配置寄存器设置Bus-Width 为Byte; 然后往Master 设备的Tx-Data 移位寄存器在地址总线的入口写入数据, 每次写入1 Byte 大小的数据(使用writeb 函数); 写完1 Byte 数据之后, Master 设备里面的Tx-Data 移位寄存器会自动把从地址总线传来的1 Byte 数据移入SSPBUF 里; 上述动作一共需要重复执行16 次.Channel-Width 的作用是指定Master 设备与Slave 设备之间数据传输的单位. 与Bus-Width 相似, Master 设备内部的移位寄存器会依据Channel-Width 自动地把数据从Master-SSPBUF 里通过Master-SDO 管脚搬运到Slave 设备里的Slave-SDI 引脚, Slave-SSPSR 再把每次接收的数据移入Slave-SSPBUF里.通常情况下, Bus-Width 总是会大于或等于Channel-Width, 这样能保证不会出现因Master 与Slave 之间数据交换的频率比地址总线与Master 之间的数据交换频率要快, 导致SSPBUF 里面存放的数据为无效数据这样的情况.4. SSPBUF.我们知道, 在每个时钟周期内, Master 与Slave 之间交换的数据其实都是SPI 内部移位寄存器从SSPBUF 里面拷贝的. 我们可以通过往SSPBUF 对应的寄存器(Tx-Data / Rx-Data register) 里读写数据, 间接地操控SPI 设备内部的SSPBUF.例如, 在发送数据之前, 我们应该先往Master 的Tx-Data 寄存器写入将要发送出去的数据, 这些数据会被Master-SSPSR 移位寄存器根据Bus-Width 自动移入Master-SSPBUF 里, 然后这些数据又会被Master-SSPSR 根据Channel-Width 从Master-SSPBUF 中移出, 通过Master-SDO 管脚传给Slave-SDI 管脚, Slave-SSPSR 则把从 Slave-SDI 接收到的数据移入Slave-SSPBUF 里. 与此同时, Slave-SSPBUF 里面的数据根据每次接收数据的大小(Channel-Width), 通过Slave-SDO 发往Master-SDI, Master-SSPSR 再把从Master-SDI 接收的数据移入Master-SSPBUF.在单次数据传输完成之后, 用户程序可以通过从Master 设备的Rx-Data 寄存器读取Master 设备数据交换得到的数据.Void UART_init(){WDTCTL = WDTPW + WDTHOLD;P1SEL|= 0x06;//I/O口的功能寄存器配置。

MSP430G2553用户手册中文

MSP430G2553用户手册中文

时钟
I/O 封装类型
16
512 2x TA3
8
8
512 2x TA3
8
4
256 2x TA3
8
2
256 2x TA3
8
1
256 2x TA3
8
24
32 引脚 QFN 封装
28 引脚
24 TSSOP 封
LF,

-
1
DCO,
VLO
20 引脚
16 TSSOP 封

16
20 引脚 PDIP 封装
24
32 引脚 QFN 封装

16
20 引脚 PDIP 封装
24
32 引脚 QFN 封装
28 引脚 24 TSSOP 封

20 引脚 16 TSSOP 封

16
20 引脚 PDIP 封装
(1) 要获得最新的封装和订购信息,请见本文档末端的封装选项,或者访问德州仪器 (TI) 的网站。 (2) 封装图样、热数据和符号可登录 /packaging获取。
P3.1/TA1.0 8 P3.0/TA0.2 9 P2.0/TA1.0 10 P2.1/TA1.1 11 P2.2/TA1.1 12 P3.2/TA1.1 13 P3.3/TA1.2 14
24 TSSOP 封
LF,

-
1
DCO,
VLO
20 引脚
16 TSSOP 封

16
20 引脚 PDIP 封装
24
32 引脚 QFN 封装
28 引脚
24 TSSOP 封
LF,

-
1
DCO,
VLO

msp430g2553串口通信

msp430g2553串口通信

__interrupt void USCI0TX_ISR(void)
{
uint TxByte=0;
if (P1IN & BIT3)
TxByte |= BIT6;
// 如 果 P1.3 输 入 高 电
平,P1.6输出高电平
if (P1IN & BIT4)
TxByte |= BIT0; 平,P1.0输出高电平
#define uint unsigned int
/*******************************************
函数名称:uart_init
功 能:初始化USCI模块
参 数:无
返回值 :无
********************************************/
void uart_init()
{
UCA0CTL1 |= UCSWRST;
//(1)默认为1,可有可

UCA0CTL1 |= UCSSEL_2;
//(2)选择时钟
源CLK = SMCLK
UCA0BR0 = 0x6d;
//(3)设置波特
率32kHz/9600 = 3.41
UCA0BR1 = 0x00; UCA0MCTL = UCBRS1 + UCBRS0; UCBRSx = 3 P1SEL |= BIT1 + BIT2 ; P1.2=TXD P1SEL2 |= BIT1 + BIT2; UCA0CTL1 &= ~UCSWRST; IE2 |= UCA0RXIE + UCA0TXIE; RXD中断 }
void main(void) {
WDTCTL = WDTPW + WDTHOLD;

我们所用的MSP430G2553...

我们所用的MSP430G2553...

电设工作小结之——MSP430G2553学习笔记——1一,MSP430G2553单片机的各个功能模块(一),IO口模块,1,我们所用的MSP430G2553有两组IO口,P1和P2。

2,IO口的寄存器有:方向选择寄存器PxDIR,输出寄存器PxOUT,输入寄存器PxIN,IO口内部上拉或下拉电阻使能寄存器PxREN,IO口功能选择寄存器PxSEL和PxSEL2,IO口中断使能寄存器PxIE,中断沿选择寄存器PxIES,IO口中断标志寄存器PxIFG。

3,所有的IO都带有中断,其中所有的P1口公用一个中断向量,所有的P2口公用一个中断向量。

所以在使用中断时,当进入中断后,还要判断到底是哪一个IO口产生的中断,判断方法可以是判断各个IO口的电平。

4,中断标志PxIFG需要软件清除,也可以用软件置位,从而用软件触发一个中断。

注意:在设置PxIESx时根据PxINx有可能会引起相应的PxIFGx置位(具体的情况见用户指南),所以在初始化完IO口中断以后,正式使用IO中断前要先将对应的PxIFGx清零。

程序如下:void IO_interrupt_init() //IO中断初始化函数{P1REN |= BIT4+BIT5+BIT6+BIT7; // pull up 内部上拉电阻使能//使用中断时,使能内部的上拉电阻这样当该脚悬空是,电平不会跳变,防止悬空时电平跳变不停的触发中断P1OUT = BIT4+BIT5+BIT6+BIT7; // 当引脚上的上拉或下拉电阻使能时,PxOUT选择是上拉还是下来//0:下拉,1:上拉P1IE |= BIT4+BIT5+BIT6+BIT7; // interrupt enabled P13中断使能P1IES |= BIT4+BIT5+BIT6+BIT7; // Hi/lo edge 下降沿中断//P1IES &= ~BIT3; //上升沿触发中断P1IFG &= ~(BIT4+BIT5+BIT6+BIT7); //中断标志位清零}5,PxOUT:如果引脚选择了内部的上拉或下拉电阻使能,则PxOUT设定电阻是上拉还是下拉,0:下拉,1:上拉6,当IO口不用时,最好不要设为输入,且为浮动状态(这是IO口的默认状态),因为当输入为浮动时,输入电压有可能会在VIL和VIH之间,这样会产生击穿电流。

MSP430G2553手册解读

MSP430G2553手册解读

MSP430G2XX外设
• 欠压复位
– 可在上电和断电期间提供正确的复位信号 – 功耗包含于MCU最低功耗时(LPM4)所消耗电流之中
• 串行通信
– 支持 I2C 和 SPI 的 USI – 支持 I2C、SPI 以及 UART 的 USCI
• Comparator_A+
– – – – 可设定反相和同相输入 可选的 RC 输出滤波器 可直接输出至 Timer_A2 捕获输入 具有中断能力
LaunchPad 开发板上各部分介绍
USB 仿真器接口
片上仿真器模块 6针 eZ430 连接器 外置晶体接口 芯片引出脚 MSP430器件和插座
P1.3 按钮
LED和跳线 P1.0 & P1.6
电源连接器 复位按钮
MSP430系列功能框图
MSP430G2XX 无Port3
低压、 电源复 位保护
VLO Min. Puls Filter ACLK Peripherals
32768Hz
OSC_Fault
辅助时钟
MCLK CPU
主系统时钟
16MHz Biblioteka CO SMCLK Peripherals
子系统时钟
上电后: MCLK 和 SMCLK 由DCOCLK 提 供(约1.1 MHz) ACLK 由 LFXT1CLK 提供(LF 模式,6pF内部负载电容)
• 。此外,其还可提供板上Flash 仿真工具, 以直接连接至PC 轻松进行编程、调试和评 估。 • MSP-EXP430G2 采用IAR Embedded Workbench 集成开发环境(IDE) 或Code Composer Studio (CCS)编写、下载和调试 应用。 • 可提供板上Flash 仿真工具,以直接连接至 PC 轻松进行编程、调试和评估。

54MSP430 G2553 4(通用串口与比较器A)

54MSP430 G2553 4(通用串口与比较器A)

54MSP430 G2553 学习笔记4通用串行通信接口(USCI)1,USCI_A:支持UART, IrDA, SPIUSCI_B:支持I2C, SPI2,UART 这个模块没什么好说的,和其他的一写处理器如S12,ARM 等差不多。

只要设置好几个控制寄存器,波特率,写几个收发函数就可以了。

下面就给出msp430g2553于PC用UART通信的基本程序:#include "msp430g2553.h"unsigned char rev;char *string1="Helloworld!";char string2[]="Get it!\n"; //\n是换行符void putchar(unsigned char c) //发送字符函数{while (!(IFG2&UCA0TXIFG)); // USCI_A0 TX buffer ready? 等待TX buffer为空UCA0TXBUF = c; // TX -> RXed character 发送字符c}void putstr(char *s) //发送字符串函数{IE2 &= ~UCA0RXIE; //发送时先关闭接收中断,不接收while((*s)!='\0') //如果没有发完,就继续循环发送{putchar(*s);// putchar('\n'); //发送换行符s++;}IE2 |= UCA0RXIE; //发送完了打开接收中断}void main(void){WDTCTL = WDTPW + WDTHOLD; // Stop WDTP1DIR=BIT0;BCSCTL1 = CALBC1_1MHZ; // Set DCO 为1MHzDCOCTL = CALDCO_1MHZ;P1SEL = BIT1 + BIT2 ; // P1.1 = RXD, P1.2=TXDP1SEL2 = BIT1 + BIT2; //第二外围模式选择// UCA0CTL1 |= UCSSEL_2; // SMCLK 其他默认:软件复位使能 USCI 逻辑保持在复位状态,用于设置串口//UCA0CTL0全部为默认状态:无奇偶校验,LSB first,8bit_data,一位停止位,UART模式,异步模式// UCA0BR0 = 8; // SMCLK 1MHz 115200 8// UCA0BR1 = 0; // 1MHz 115200// UCA0MCTL = UCBRS2 + UCBRS0; // Modulation UCBRSx = 5//下面是选择ACLK,波特率设置为固定的UCA0CTL1 |= UCSSEL_1; //ACLKUCA0BR0 = 3; // ACLK 32768Hz 9600 32768Hz/9600 = 3.41UCA0BR1 = 0; // 32768Hz 9600UCA0MCTL = UCBRS1 + UCBRS0; // Modulation UCBRSx = 3UCA0CTL1 &= ~UCSWRST; // **Initialize USCI state machine** 初始化释放,可以操作 IE2 |= UCA0RXIE; // Enable USCI_A0 RX interrupt 接收中断使能__bis_SR_register(LPM0_bits + GIE); // Enter LPM0, interrupts enabled// Echo back RXed character, confirm TX buffer is ready first#pragma vector=USCIAB0RX_VECTOR__interrupt void USCI0RX_ISR(void){while (!(IFG2&UCA0TXIFG)); // USCI_A0 TX buffer ready? 等待TX buffer为空UCA0TXBUF = UCA0RXBUF; // TX -> RXed character 发送接收到是数据rev=UCA0RXBUF;if(rev&0x01){P1OUT |= BIT0;putstr(string1);putstr(string2);}elseP1OUT &= ~BIT0;}注意:关于波特率的设置这一块还没有看懂,但上面的例子总的设置是对的值得说明的是:可以用定时器来实现串口通信功能,例子还没有看。

MSP430G2553_

MSP430G2553_

ZeroMemory(&wrOverlapped,sizeof(wrOverlapped)); if (wrOverlapped.hEvent != NULL) { ResetEvent(wrOverlapped.hEvent); wrOverlapped.hEvent = CreateEvent(NULL,TRUE,FALSE,NULL); } PurgeComm(hCom,PURGE_TXCLEAR|PURGE_RXCLEAR); txIndex=0; rxIndex=0; } virtual ~ComPort(void) { if(bComOpened) CloseHandle(hCom); } unsigned char rxIndex; unsigned char lpInBuffer[1024]; int Sync(void){ int i=1000; while(rxIndex!=txIndex && txIndex!=0 && (--i)){ int size=Read(); for(int i=0;i<size;i++) if(((lpInBuffer[i]&0x80)==0) && (lpInBuffer[i]!=0)) rxIndex=lpInBuffer[i]; } if(i<1) return -1; return rxIndex; } int Read(void){ DWORD dwBytesRead=1024; COMSTAT ComStat; DWORD dwErrorFlags; OVERLAPPED m_osRead; memset(&m_osRead,0,sizeof(OVERLAPPED)); m_osRead.hEvent=CreateEvent(NULL,TRUE,FALSE,NULL); ClearCommError(hCom,&dwErrorFlags,&ComStat); dwBytesRead=min(dwBytesRead,(DWORD)ComStat.cbInQue); //clear port buffer

MSP430G2553数据手册

MSP430G2553数据手册

8
512 2x TA3
8
8
256 2x TA3
8
8
256 2x TA3
8
8
256 2x TA3
8
8
512 2x TA3
8
-

USCI A0/B0
时钟
I/O 封装类型
24 32-QFN
28 引脚
24 TSSOP 封
LF,DC

1
O,VL
20 引脚
O
16 TSSOP 封

16
20 引脚 PDIP 封装
LF,DC

1
O,VL
20 引脚
O
16 TSSOP 封

16
20 引脚 PDIP 封装
24 32-QFN
28 引脚
24 TSSOP 封
LF,DC

1
O,VL
20 引脚
O
16 TSSOP 封

16
20 引脚 PDIP 封装
24 32-QFN
28 引脚
24 TSSOP 封
LF,DC

1
O,VL
20 引脚
3
MSP430G2x53 MSP430G2x13
ZHCS178D – APRIL 2011 – REVISED NOVEMBER 2011

器件引出脚配置、MSP430G2x13 和 MSP430G2x53、20 引脚器件、 TSSOP 和 PDIP 封装
DVCC 1 P1.0/TA0CLK/ACLK/A0/CA0 2 P1.1/TA0.0/UCA0RXD/UCA0SOMI/A1/CA1 3 P1.2/TA0.1/UCA0TXD/PUCA0SIMO/A2/CA2 4 P1.3/ADC10CLK/CAOUT/VREF-/VEREF-/A3/CA3 5 P1.4/SMCLK/UCB0STE/UCA0CLK/VREF+/VEREF+/A4/CA4/TCK 6 P1.5/TA0.0/UCB0CLK/UCA0STE/A5/CA5/TMS 7

mps430G2553中文资料

mps430G2553中文资料

28 引脚
24 TSSOP 封
LF,

-
1
DCO,
VLO
20 引脚
16 TSSOP 封

16
20 引脚 PDIP 封装
24
32 引脚 QFN 封装
28 引脚
24 TSSOP 封
LF,

-
1
DCO,
VLO
20 引脚
16 TSSOP 封

16
20 引脚 PDIP 封装
24
32 引脚 QFN 封装
28 引脚
引导加 载器 (BSL)
嵌入式 仿真模
块 (EEM)
1
1
1
1
1
1
1
1
1
1
表 1. 提供的选项(1)(2) (接下页)
ZHCS178E – APRIL 2011 – REVISED JANUARY 2012
闪存 (KB)
RAM (B)
Timer_A
COMP_A+ 通道
10 通道 ADC
USCI A0/B0
24 TSSOP 封
LF,

-
1
DCO,
VLO
20 引脚
16 TSSOP 封

16
20 引脚 PDIP 封装
24
32 引脚 QFN 封装
28 引脚
24 TSSOP 封
LF,

-
1
DCO,
VLO
20 引脚
16 TSSOP 封

16
20 引脚 PDIP 封装
Copyright © 2011–2012, Texas Instruments Incorporated
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

MSP430g2553串口通信MSP430的不同型号,其串行通讯工作模式是一样的。

以MSP430G2553为例进行说明。

MSP430G2553是20个引脚的16位单片机。

具有内置的16位定时器、16k 的FLASH 和512B 的RAM ,以及一个通用型模拟比较器以及采用通用串行通信接口的内置通信能力。

此外还具有一个10位的模数(A/D)转换器。

其引脚排布如图1.1所示。

其功能表如表1.1所示。

串行通讯模块主要由三个部分组成:波特率生成部分、发送控制器以及接收控制器。

如图1.2所示。

一、UART 模式在异步模式下,接收器自身实现帧的同步,外部的通讯设备并不使用这一时钟。

波特率的产生是在本地完成的。

异步帧格式由1个起始位、7或8个数据位、校验位(奇/偶/无)、1个地址位、和1或2个停止位。

一般最小帧为9个位,最大为13位。

图1.2 串行通讯模块内部结构图图1.1 MSP430G2553引脚图(一)UART的初始化单片机工作的时钟源来自内部三个时钟或者外部输入时钟,由SSEL1、SSEL0,以决定最终进入模块的时钟信号BRCLK的频率。

所以配置串行通讯的第一步就是选择时钟。

通过选择时钟源和波特率寄存器的数据来确定位周期。

所以波特率的配置是串行通讯中最重要的一部分。

波特率设置用三个寄存器实现:UxBR0(选择控制器0):波特率发生器分频系数低8位。

UxBR1(选择控制器1):波特率发生器分频系数高8位。

UxMCTL 数据传输的格式,以及数据传输的模式是通过配置控制寄存器UCTL来进行设置。

接收控制部分和发送控制部分。

首先需要串行口进行配置、使能以及开启中断。

串口接收数据一般采用中断方式,发送数据采用主动发送。

当接收到一个完整的数据,产生一个信号:URXIFG0=1(类似于51单片机的接收中断标志位),表示接收完整的数据。

当数据正在发送中,UTXIFG0=1,此时不能再发送数据,必须等当前数据发送完毕(UTXIFG0=0)才能进行发送。

程序实例如下:Void UART_init(){WDTCTL = WDTPW + WDTHOLD;P1SEL|= 0x06;//I/O口的功能寄存器配置。

为1时作为模块输出或者输出,0为端口输入或者输出。

配置P1.1,P1.2为串行口。

P2DIR=0x04;//串口发送端为输出,串口接收端为输入。

0为输入,1为输出U0CTL |= CHAR; // 配置控制寄存器,数据类型为8位。

U0TCTL |= SSEL0; // 选择时钟UCLK= ACLK。

U0BR0 = 0x45; // 分频系数的高8位,8MHz 时钟下波特率为115200U0BR1 = 0x00; // 分频系数的低8位。

U0MCTL = 0x00; // 波特率的调整。

U0CTL&= ~SWRST;//系统复位。

只有对SWRST 复位,USART 才能重新被允许。

而接收和发送允许标志URXE和UTXE不会因SWRST 而更改。

ME1 |= UTXE0 + URXE0; //使能USART0 TXD/RXD模块USART中特有的使能配置。

IE1 |= URXIE0;//使能USART0 接收中断_EINT();//开启全部中断。

_BIS_SR(LPM0_bits + GIE); // 初始化完毕,进入睡眠状态。

等待工作。

该程序直接调用。

}发送数据函数:__interrupt void usart0_rx (void){while (!(IFG1 & UTXIFG0)); // 判断发送缓冲区是否为空。

TXBUF0 = RXBUF0; // 将数据发送到串口。

}二、SPI模式USTAR下的SPI模式有如下特点:1、SPI模式支持3线和4线模式;2、支持主机与从机模式;3、接受和发送有各自独立的发送移位寄存器和缓冲器;4、接受和发送都有独立的中断能力;5、移位时钟的极性和相位可编程;6、字符长度可以是7位或者8位。

SPI工作在全双工下,即主机发送的同时也接收数据,传输的速率由编程决定。

4线SPI模式用附加数据线,允许从机数据的发送和接收。

其信号如下:SIMO:从进主出,主机模式下,数据输出;从机模式下,数据输入。

SOMI:从出主进,主机模式下,数据输入,从机模式下,数据输出。

UCLK:USART SPI模式时钟,信号有主机输出,从机输入。

CLK时钟只能由主机提供。

STE:从机模式发送接收允许控制脚,用于4线模式。

(一)SPI初始化SPI当中不需要波特率调整,所以UxMCTL=0x0000,SPI的初始化及其复位和UART 公用一套寄存器。

在初始化或者重新配置USART的SPI时,必须按照以下顺序进行:1、UxCTL寄存器的第0位SWRST置位;2、在SWRST置位的条件下,初始化所有的SPI寄存器,包括UxCTL寄存器;3、通过置位模块使能寄存器MEx的URXEx和UTXEx位使能SPI的接受和发送使能模块;4、通过软件复位UxCTL寄存器的第0位SWRST;5、通过中断使能寄存器IEx的URXIEx和UTXIEx来使能发送和接受中断。

void main(void){WDTCTL = WDTPW + WDTHOLD; // 关闭看门狗。

P1SEL |= 0x07; // 配置P1.0、P1.1、P1.2模块输出。

UCTL = CHAR + SYNC + MM; // 工作模式以及数据格式的设置,CHAR为1时为8-bit,0时为7位,SYNC控制通讯模式,1为SPI模式,0为UART模式。

UTCTL = CKPL + STC+ SSEL0+ SSEL1; // 置位SSEL0与SSEL1时钟的类型,11则为SMCLK;CKPL为时钟极性控制位,0时UCLKI信号与UCLK信号极性相同,1时UCLKI信号与UCLK信号极性相反。

UBR0 = 0x02; // SPICLK = SMCLK/2,2分频。

波特率的设置。

UBR1 = 0x00;UMCTL = 0x00;//SPI通讯中,不需要使用波特率调整器。

UCTL &= ~SWRST; // 复位。

ME1 |= USPIE0; // SIP模块接收与发送允许使能IE1 |= URXIE0 + UTXIE0; //接收与发送中断使能_BIS_SR(LPM4_bits + GIE); // 初始化完毕,进入睡眠模式}__interrupt void SPI0_rx (void){P1OUT = RXBUF0; // 向P1OUT送入数据}__interrupt void SPI0_tx (void){unsigned int i;i = P1IN;i = i >> 4;TXBUF0 = i; // 数据发送。

}三、寄存器及其功能通信模块寄存器如下:控制寄存器内的信息决定了USART的基本操作。

如:选择通信协议、通信模式和校验位。

在SWRST复位使USART复位操作禁止前,各位应根据选择的模式进行编程。

表3.2 发送控制寄存器UxCTL(2)发送控制寄存器UxTCTL(未作说明的位未用)寄存器UxTCTL控制与发送操作相关的USART硬件。

表3.3 发送控制寄存器UxTCTLURCTL 控制与接收操作相关的USART硬件并保存由最新写入URXBUF的字符引起的出错状况和唤醒条件。

若FE、PE、OE、BRK、RXERR 或RXWake 中的任何一位置位,通过接收下一个字符不能使其复位。

它们的复位要通过访问接收缓存URXBUF、USART的软件复位SWRST、系统复位PUC或用指令修改。

表3.4 接收控制寄存器URCTL(波特率产生器利用波特率选择寄存器UxBR1和UxBR0,以及调整控制寄存器UxMCTL,来产生串行数据流的位定时。

UxBR0、UxBR1这两个寄存器是用于存放波特率分频因子的整数部分,若波特率发生器的输入频率BRCLK不是所需波特率的整数倍,带有小数,则整数部分写入UxBR寄存器,小数部分则由调整寄存器UxMCT的内容反映。

波特率由以下公式计算:波特率=BRCLK/(UBR+(M7+M6+ …M0)/8)寄存器各位如下:接收缓存存放移位寄存器最后接收的字符,可由用户访问,读接收缓存可以复位接收时产生的各种错误标志、RXWAKE位和URXIFGx位。

如果传输7位数据,接收缓存内容右对齐,最高位为0。

当收接和控制条件为真时,接收缓存装入当前接收到的字符。

(6发送缓存含有当前要由发送器发送的数据。

UTXIFG 标志表示UTXBUF已准备好接收下一个要发送的字符。

将数据写入UTXBUF初始化发送功能。

如果发送移位寄存器为空或即将为空,数据的发送立即开始。

只有当UTXBUF为空时,数据才能写入缓存,否则可能发送不可预料的字符。

表1.1 MSP430G2553引脚功能表。

相关文档
最新文档