打印
[MCU]

基于 MSP430单片机的SPI总线通信控制系统研究

[复制链接]
846|13
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
god9987|  楼主 | 2020-11-17 20:43 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
基于 MSP430单片机的SPI总线通信控制系统研究

对于 常 见 的 具 有 SPI通信 传 感 器 的 单 片 机 控制,由于普通 的51系列 单 片 机 不 具 备 SPI总线 功能,因此,当51系列单片机和具有 SPI总线的传感器通信时通常采用模拟 SPI时序的方法,程序显得复杂、繁 琐.而 MSP430单片 机 端 口 具 有 较 多 的 第二功能,对SPI总线存在着相关寄存器与之对应,在通信格式、时钟源选择以及波特率的设定等方面都可以由寄存器确定,使 SPI总线通信可以用比较简洁的 程 序 完 成.按 照 文 献[1]给出 的 设 计 方 案,基 于MSP430单片机的 SPI总线 通 信 过 程 中,仅 有 模 拟SPI时序 的 方 法 可 供 采 纳.为 了 充 分 利 用 MSP430单片机寄存器的功能,本文选择 MSP430单片机的3种 SPI通信方式进行研究并比较各自特点,也即在硬件正确设计的基础上,绘制流程图后编写程序,针对 MSP430单片机的SPI相关寄存器功能以及中断功能 等,分 别 采 用 SPI模拟 时 序、SPI寄存 器 和SPI中断进行 MSP430单片机与具有SPI总线的传感器的通信[2],完成 了 基 于 MSP430单片 机 的 SPI总线通信的硬件设计和软件编程.整个设计的核心是以 MSP430F169单片机为控制器,控制具有 SPI总线通信的芯片 nRF24L01无线模块.系 统 由 发 射板和接收板两部分组成,具体设计思路为:在发射板上用键盘设定数据后再按下发送键,将设定数据在具有 SPI总 线的单片机端口写入无线发射模块nRF24L01 并 发 送;接 收 板 通 过 无 线 发 射 模 块nRF24L01接收数据,并通过数码管进行显示,当发射新的数据后,接收板自动刷新并继续在数码管显示新的数据.实验结果表明,该控制方式具有较高的应用价值.

使用特权

评论回复

相关帖子

沙发
god9987|  楼主 | 2020-11-17 20:44 | 只看该作者
MSP430F169的 SPI总 线 接 收 是 同 步 串 行 接
口,其硬件功能很强,相 对 应 的 程 序 简 洁,可 以 使
CPU 有更多时间处理其他事务.
MSP430F169SPI的特点包括7位或8位数据
长度、3线或4线同步数据传输、主机 或 从 机 操 作、
独立地发送和接收移位寄存器、独立发送和接收缓
冲器、时钟的极性和相位可编程、主模式的时钟频率
可编程、传输速率可编程以及接收和发送有独立的
中断能力等.

使用特权

评论回复
板凳
god9987|  楼主 | 2020-11-17 20:47 | 只看该作者

使用特权

评论回复
地板
god9987|  楼主 | 2020-11-17 20:48 | 只看该作者

使用特权

评论回复
5
god9987|  楼主 | 2020-11-17 20:49 | 只看该作者
基于 MSP430单片机的 SPI通信之前,必须进
行端口初始化设置,对于模拟方法、寄存器方法和中
断方法这3种方法,第一种方法和后两种方法的端
口初始化设置是不同的.模拟 SPI时序方法的端口
初始化描述如下:
voidRF24L01_IO_set(void)

  P1DIR|= 0x40;
  P3DIR|= 0x0B;

其函数的写入如下:
charSPI_Write_Buf(charreg,char*pBuf,charchars)

charstatus,ctr;
CS_0;
delay_us(1);
status= SPI_RW(reg);
delay_us(1);
for(ctr=0;ctr<chars;ctr++)

SPI_RW(*pBuf++);
delay_us(1);

  CS_1;
return(status);

使用特权

评论回复
6
god9987|  楼主 | 2020-11-17 20:51 | 只看该作者
对于寄存器方法和中断方法,其端口初始化程
序描述如下:
voidRF24L01_IO_set(void)

ME1|=USPIE0;   // 使能 USART0SPI模式
UCTL0|= CHAR + SYNC + MM;   //8位数 据,
SPI模式,主机模式
UTCTL0|= CKPH + SSEL1 + SSEL0 + STC;   
//SMCLK 时钟信号,3线SPI模式
UBR00=0x02;   // 波特率设定
UBR10=0x00;   // 波特率设定
UMCTL0=0x00;   // 不用于SPI模式
UCTL0&=~SWRST;   // 初始化 USART
P3SEL|=0x0e;   //P3.3,P3.1,P3.0端口第二功能
P3DIR|=(BIT3|BIT1|BIT0);   //P3.3,P3.1,P3.0
端口设置为输出
P3DIR &= ~BIT2;   //P3.2端口设置为输入
P1DIR &= ~BIT7;   //P1.7端口设置为输入
P1DIR|= BIT6;   //P1.6端口设置为输出

使用特权

评论回复
7
god9987|  楼主 | 2020-11-17 20:54 | 只看该作者

使用特权

评论回复
8
god9987|  楼主 | 2020-11-17 21:00 | 只看该作者

使用特权

评论回复
9
god9987|  楼主 | 2020-11-17 21:01 | 只看该作者
主机和从机交换数据时,主机必须确定何时输
出数据到 MOSI端口而从机在何时采样数据,或者
从机在何时 输 出 数 据 到 MISO 端口而主机何时采
样数据.由于SPI通信属于同步通信,其数据的变化
和采样都是随着时钟沿发生的,也即数据总是在时
钟的边沿附近变化或采样,而一个时钟周期包括上
升沿和下降沿,数据从发送到稳定需要时间,因此当
主机在时钟上升沿输出数据到 MOSI,从机也只 有
在时钟下降沿去采样数据,SPI总线的信号时 序 有
严格的规定[9]

对于模拟SPI时序,程序如下:
charSPI_RW(chardata3)

chara,state=0;
for(a=0;a<8;a++)     // 输出8位

if((data3 &0x80)==0x80)

delay_us(1);
MOSI_1;

else

delay_us(1);
MOSI_0;

data3= (data3 << 1);
state<<=1;
delay_us(1);
SCK_1;
if((P3IN&0x04)==0x04)temp++;
SCK_0;

return(temp);

使用特权

评论回复
10
wiba| | 2020-12-3 09:12 | 只看该作者
能不能缓缓字体 看起来好别扭啊

使用特权

评论回复
11
zljiu| | 2020-12-3 09:14 | 只看该作者
指那种分主从的通讯?

使用特权

评论回复
12
coshi| | 2020-12-3 09:22 | 只看该作者
资料不错 就是代码不好看

使用特权

评论回复
13
磨砂| | 2020-12-3 09:24 | 只看该作者
这种通讯能带几个节点啊

使用特权

评论回复
14
晓伍| | 2020-12-3 09:25 | 只看该作者
这也是51的一个比较大的遗憾了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

54

主题

1028

帖子

0

粉丝