数码管模块测试说明 基于stm32spi实验_第1页
数码管模块测试说明 基于stm32spi实验_第2页
数码管模块测试说明 基于stm32spi实验_第3页
数码管模块测试说明 基于stm32spi实验_第4页
数码管模块测试说明 基于stm32spi实验_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、SEG模块测试1、功能描述使用数码管来显示当前MP3播放的歌曲序号2、IO口复用功能2.1 IO口复用功能描述1 使用默认复用功能前必须对端口位配置寄存器编程l 对于复用的输入功能,端口可以配置成:Ø 输入模式(浮空,上拉或下拉);Ø 复用功能输出模式:输入驱动器被配置成浮空输入模式;l 对于复用的输出功能,端口必须配置成复用功能输出模式(推挽或开漏);l 对于双向复用功能,端口必须配置复用功能输出模式(推挽或开漏),这时,输入驱动器被配置成浮空输入模式;如果把一端口配置成复用输出功能,将使引脚和输出寄存器断开,并和片上外设的输出信号连接如果软件把一个GPIO脚配置成复用功

2、能,但是外设没有被激活,它的输出将不确定。2,I/O端口的基本结构3 端口位配置表4输出模式位2.2 使用IO口复用功能配置步骤/=SPI1复用功能初始化=GPIO_InitStructure.GPIO_Pin= GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7;/选择PA.4,PA.5, PA.6,PA.7GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;/管脚频率为50MHZGPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;/模式为复用推挽输出 (SPI1) G

3、PIO_Init(GPIOA, &GPIO_InitStructure); /初始化GPIOA寄存器3、SPI接口使用3.1 SPI功能描述串行外设接口(SPI)允许芯片与外部设备以半/全双工,同步,串行方式通信。此接口可以被配置成主模式,在这种模式下,它要为外部从设备提供通信时钟(SCK).接口还能以多主配置方式工作。它可用于多种用途,包括可选第三根双向数据的双线单工同步传输,或使用CRC校验的可靠通信。SPI方框图:SPI通过4个引脚和外部设备相连:l MISO: 主入/从出数据口,此引脚可以被用来在从模式中发送数据,在主模式中接受数据。l MOSI: 主出/从入数据口,此引脚可以

4、用来在主模式是发送数据,在从模式时接受数据。l SCK: SPI主设备输出串行时钟,SPI从设备输入串行时钟l NSS: 从选择。这是一个用来选择主/从模式的可选引脚。SPI主设备和从设备分别通信时,该引脚起到依次片选各个从设备的作用,以避免发生数据线冲突。从设备 的NSS输入可以由主设备上的标准I/O端口驱动。SPI工作在主设备配置时,如果SSOE位使能,则NSS引脚用作输出,并输出低电平;此时,所有NSS引脚连到该设备NSS引脚的其他设备都将收到低电平,当这些设备配置为NSS硬件模式时,就被自动地配置成从设备.3.2 时钟信号的相位和极性使用SPI_CR寄存器的CPOL和CPHA位,组合成

5、四种可能的时序关系,CPOL(时钟极性)位控制在没有数据传输时时钟的空闲状态电平,此位对主模式和从模式下的设备都有效。如果控制CPOL被复位,SCK引脚在空闲状态保持低电平;如果CPOL被置位,SCK引脚在空闲状态保持高电平。如果CPHA(时钟相位)位被置位,SCK时钟的第二个边沿(CPOL位为0时就是下降沿,CPOL位为1时就是上升沿)进行数据位的采样。数据在第一个时钟边沿被锁存,如果CPHA位被复位,SCK时钟的第一个边沿(CPOL位为0时就是下降沿,CPOL位为1时就是上升沿)进行数据采样,数据在第二个时钟边沿被锁存。CPOL时钟的极性和CPHA时钟相位的组合选择数据捕促的时钟边沿。No

6、te:1. 在改变CPOL/CPHA位之前,必须清除SPE位将SPI禁止。2. 主和从必须配置成相同的时序模式。3. SCK的空闲状态必须和SPI_CR1寄存器指定的极性一致(CPOL为1时,空闲时应上拉SCK为高电平;CPOL为0时,空闲时应下拉SCK为低电平)。4. 数据帧格式(8位或16位)由SPI_CR1寄存器的DFF位选择,并且决定发送/接受的数据长度数据时钟时序图:3.3 SPI应用单主和单从应用:MOSI脚相互连接,MISO脚相互连接,用这种方式,数据在主和从之间串行的传输(MSB位在前)。通信总是由主设备发起,从设备通过MOSI脚把数据发送给从设备,从设备通过MISO引脚回传数

7、据。这意味全双工通信的数据输出和数据输入是同一个时钟信号同步的;时钟信号由主设备通过SCK脚提供。3.4 SPI库函数函数名描述SPI_DeInit将外设SPIx寄存器重设为缺省值SPI_Init根据SPI_InitStruct中指定的参数初始化外设SPIx寄存器SPI_Cmd使能或者失能SPI外设SPI_I2S_SendData发送数据3.4 使用SPI基本步骤SPI主模式:配置步骤:1. 通过SPI_CRQ寄存器的BR2:0位定义串行时钟波特率。2. 选择CPOL和CPHA位,定义数据传输和串行时钟的相位关系。3. 设置DFF位来定义8或16位数据帧格式。4. 配置SPI_CR1寄存器的L

8、SBFIRST位定义帧格式5. 如果NSS引脚需要工作在输入模式,硬件模式中在整个数据帧传输期间应把NSS脚连接到高电平;在软件模式中,需设置SPI_CR1寄存器的SSM和SSI位,如果NSS引脚工作在输出模式,则只需设置SSOE位。6. 必须设置MSTR和SPE位(只当NSS脚被连到高电平,这些位才能保持置位)。在这个配置 中,MOSI脚是数据输出,而MISO脚是数据输入。数据发送过程:当一个字节写进发送缓冲器时,发送过程开始。在发送第一个数据位时,数据字被并行地(通过内部总线)传入移位寄存器,而后串行地移出到MOSI脚上;MSB在先还是LSB在先,取决于SPI_CR1寄存器中的LSBFIR

9、SRT位,数据从发送缓冲器传输到移位寄存器时TXE标志将被置位,如果设置SPI_CR1寄存器中的TXEIE位,将产生中断4、硬件电路Note:使用 SPI与74HC595进行通信5、74HC595功能描述74HC595,是为Motorola的SPI总线开发的一款串并转换芯片,由于74HC595的输入输出电平兼容LSTTL,NMOS,COMOS电平,且具有较强的输出负载能力,而被广泛地运用于MCU(微控制器),MPU(微处理器)的I/O扩张。74HC595在5V供电的时候能够达到30MHz的时钟速度,每个并行输出端口均能承受20mAd灌电流和拉电流,这个特点保证了不用增加额外的扩流电路即可轻松驱

10、动LED。引脚及其功能:管脚号管脚名称管脚功能描述1QB锁存器输出,三态2QC锁存器输出,三态2QD锁存器输出,三态4QE锁存器输出,三态5QF锁存器输出,三态6QG锁存器输出,三态7QH锁存器输出,三态8GND电源地9SOUT串行输出,用于级联,无三态输出功能10SCLR低电平有效,当此管脚上出现低电平时,将复位内部的移位寄存器,但不影响8位锁存器的值11SCK移位寄存器时钟输入 ,上升沿把14脚的数据移入内部寄存器12RCK锁存时钟输入,上升沿将把内部移位寄存器的值锁存起来13nCS低电平有效,将锁存器的输出映射到输出并行口(QA-QH)上14SI串行数据的输入,数据从这个管脚移进内部的8

11、位串行移位寄存器15QA锁存器输出,三态16VCC电源正,2-6V6软件代码/* 版权:源享教育()* 文件:Seg_Module.c* 版本:1.0* 说明:MP3播放器当前播放歌曲序号,播放第1首时4位数码管显示0001,依次排列* 作者:刘斌* 说明:数码管段显由HC595控制,位显由IO口SEG_A1/SEG_A2/SEG_A3/SEG_A4控制。*HC595使用SPI通信方式,Cortex M3的SPI使用步骤如下:*1、使能APB2外设SPI1时钟:RCC_APB2PeriphClockCmd();*2、将外设SPI寄存器重设为缺省值:SPI_I2S_DeInit();*3、初始化

12、外设SPI寄存器:SPI_Init();*4、使能APB2外设SPI:SPI_Cmd();*5、调用SPI数据发送函数:SPI_I2S_SendData();-修改记录-* 修改功能:* 修改时间:* 修改作者:* 遗留问题:*/#include "stm32f10x_lib.h" /包含了所有的头文件 它是唯一一个用户需要包括在自己应用中的文件,起到应用和库之间界面的作用。#defineHC595_nCS GPIO_Pin_0/HC595_nCS = PA0#defineHC595_RCK GPIO_Pin_1/HC595_RCK = PA1#defineSEG_A1 G

13、PIO_Pin_8/SEG_A1 = PC8#defineSEG_A2 GPIO_Pin_15/SEG_A2 = PB15#defineSEG_A3 GPIO_Pin_9/SEG_A3 = PC9#defineSEG_A4 GPIO_Pin_8/SEG_A4 = PE8u8 const NumberTube_TAB10=0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90;/数码管09/* Function Name : SEG_Init* Description : SEG数码管引脚,SPI1引脚初始化* Input : None* Return

14、 : None*/voidSEG_Init(void)GPIO_InitTypeDef GPIO_InitStructure;/ 声明一个IO口结构体变量SPI_InitTypeDef SPI1_InitStructure;/声明一个SPI结构体变量RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA , ENABLE);/ 使能APB2外设GPIOA时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB , ENABLE);/ 使能APB2外设GPIOB时钟RCC_APB2PeriphClockCmd(RCC_APB2Pe

15、riph_GPIOC , ENABLE);/ 使能APB2外设GPIOC时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE , ENABLE);/ 使能APB2外设GPIOE时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1 , ENABLE);/ 使能APB2外设SPI1时钟 /=PA口IO结构体初始化= GPIO_InitStructure.GPIO_Pin= HC595_nCS|HC595_RCK;/选择PA.0,PA.1 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_5

16、0MHz;/管脚频率为50MHZ GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;/模式为推挽输出 GPIO_Init(GPIOA, &GPIO_InitStructure); /初始化GPIOA寄存器/=PB口IO结构体初始化= GPIO_InitStructure.GPIO_Pin= SEG_A2;/选择PB.15 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;/管脚频率为50MHZ GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;/模

17、式为推挽输出 GPIO_Init(GPIOB, &GPIO_InitStructure); /初始化GPIOB寄存器/=PC口IO结构体初始化= GPIO_InitStructure.GPIO_Pin= SEG_A1|SEG_A3;/选择PC.8,PC.9 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;/管脚频率为50MHZ GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;/模式为推挽输出 GPIO_Init(GPIOC, &GPIO_InitStructure); /初始化GP

18、IOC寄存器/=PE口IO结构体初始化= GPIO_InitStructure.GPIO_Pin= SEG_A4;/选择PE.8 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;/管脚频率为50MHZ GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;/模式为推挽输出 GPIO_Init(GPIOE, &GPIO_InitStructure); /初始化GPIOE寄存器/=SPI1复用功能初始化=GPIO_InitStructure.GPIO_Pin= GPIO_Pin_4|GPIO_Pin

19、_5|GPIO_Pin_6|GPIO_Pin_7;/选择PA.4,PA.5, PA.6,PA.7 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;/管脚频率为50MHZ GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;/模式为复用推挽输出 (SPI1) GPIO_Init(GPIOA, &GPIO_InitStructure); /初始化GPIOA寄存器/=设置SPI1工作模式=SPI1_InitStructure.SPI_Direction = SPI_Direction_2Lines_F

20、ullDuplex;/SPI设置为双线双向全双工SPI1_InitStructure.SPI_Mode = SPI_Mode_Master;/设置为主SPISPI1_InitStructure.SPI_DataSize = SPI_DataSize_8b;/SPI发送接收8位帧结构SPI1_InitStructure.SPI_CPOL = SPI_CPOL_High;/CPOL = 1SPI1_InitStructure.SPI_CPHA = SPI_CPHA_1Edge;/CPHA = 0SPI1_InitStructure.SPI_NSS = SPI_NSS_Hard;/NSS由外部管脚管

21、理SPI1_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_64;/分频值为64SPI1_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;/数据传输LSB(低位)开始SPI1_InitStructure.SPI_CRCPolynomial = 7;SPI_I2S_DeInit(SPI1);/将外设SPI1寄存器重设为缺省值 ;SPI_Init(SPI1, &SPI1_InitStructure);/初始化外设SPI1寄存器/=使能SPI1=SPI_Cmd(SPI1, EN

22、ABLE);/使能SPI1外设GPIO_ResetBits(GPIOA, HC595_nCS);/* Function Name : SEG_BitSelect* Description : 选择数码管的位选* Input : data 选择码,data的取值为0x01,0x02,0x04,0x08* Return : None*/void SEG_BitSelect(u8 data)if(data & 0x01) != 0)GPIO_ResetBits(GPIOC, SEG_A1);/ 控制smgA1 = PC8elseGPIO_SetBits(GPIOC, SEG_A1);if(d

23、ata & 0x02) != 0)GPIO_ResetBits(GPIOB, SEG_A2);/ 控制smgA2 = PB15elseGPIO_SetBits(GPIOB, SEG_A2);if(data & 0x04) != 0)GPIO_ResetBits(GPIOC, SEG_A3);/ 控制smgA3 = PC9elseGPIO_SetBits(GPIOC, SEG_A3);if(data & 0x08) != 0)GPIO_ResetBits(GPIOE, SEG_A4);/ 控制smgA4 = PE8elseGPIO_SetBits(GPIOE, SEG_A

24、4);/* Function Name : SEG_Display* Description : 数码管显示4位数据* Input : data需要显示的数据*radix_point小数点的位置,取值范围为4、3、2* Return : None*/voidSEG_Display(u16 data,u8 radix_point)u16 j,one,ten,hundred,thousand;/个,十,百,千,的变量声明thousand = data / 1000;/计算千位if(thousand != 0) data -= thousand*1000;hundred = data / 100;/

25、计算百位if(hundred != 0) data -= hundred*100; ten = data / 10;/计算十位if(ten != 0) data -= ten*10; one = data % 10;/计算个位/-显示千位数据-GPIO_ResetBits(GPIOA, HC595_RCK); if(radix_point=4)SPI_I2S_SendData(SPI1, NumberTube_TABthousand & 0x7f); elseSPI_I2S_SendData(SPI1, NumberTube_TABthousand );GPIO_SetBits(GPIOA, HC595_RCK);SEG_BitSelect(0x08);/打开数码管位选端for(j=0;j<500;j+);/小段延时SEG_BitSelect(0x00);/关闭显示/-显示百位数据-GPIO_ResetBits(GPIOA, HC595_RCK);if(radix_point=3)SPI_I2S_SendData(SPI1, NumberTube_TABhundred & 0x7f);elseSPI_I2S_SendData(SP

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论