关于stm32f103 读当前时钟的SPI,读操作的时候没有时钟是怎么回事

踏踏实实搞清&stm32&SPI总线&基础和编程
SPI应用是相当的广了,同步串行总线,同步同步当然需要时钟信号来统一了,这样通讯双方通讯时就比较默契没那么延迟(呆呆)了。应用于中低速场合。
学起来从哪些地方入手呢?如下:
SPI概念与特点&&
关键的时序接受&&&
编程时重点&&&&
STM32内部的SPI使用(介绍、功能、中断)
SPI概念与特点:不多说,串行,需要同步信号&&
主从结构的&&
CS(片选)& SCK&&
&&&&&&&&&&&&&&&全双工&&一主控多从&&&8或16位数据通信
其它特点:8个主模式波特率预分频系数& fpcll/2
主模式和从模式下快速通行& 并支持切换
&&&&&&&&&编程MSB
专用发送和接受标志可促发中断
有SPI忙标志位
支持硬件CRC校验,发送模式下crc值作为最后一个字节被发送,接受模式下最后一字节自动CRC校验
支持错误中断标志,支持DMA功能的1字节发送和接受缓冲器:产生发送和接受请求。
SPI总线时序介绍:
看下下图应该就会了
使用stm32& spi需要以下的步骤
1.管脚因为复用的,故先配置好管脚、并打开spi时钟
2.设置spi的工作模式
通过 SPI1_CR1 来设置,设置SPI1主机模式,设置数据格式8位,然后通过 CPOL 和 CPHA 位来设置
SCK时钟极性及采样方式。并设置 SPI1 的时钟频率(最大18Mhz),以及数据的格式(MSB 在前还是 LSB在前)。
3.使能SPI.
SPI固件库函数
下面是初始化,必须得结构体原型
typedef struct
& uint16_t
SPI_D//设置方向&&&&
(2线全双工、2线只接受、一线发送、一线接受)
& uint16_t
//模式&&&&&&&&
(从或主设备)
& uint16_t SPI_DataS
//宽度&&&&&&&&
(8或16位)
& uint16_t
SPI_CPOL;&&&&&//时钟极性&&&&&(低或高)
& uint16_t
SPI_CPHA;&&&&
//时钟相位&&&&&(第一个或第二个跳变沿)
& uint16_t
SPI_NSS;&&&&&
//片选方式&&&&&(硬件或软件方式)
& uint16_t
SPI_BaudRateP&//波特率预分频&&&
(从2---256分频)&&
& uint16_t
SPI_FirstB&&//最先发送的位&&&&&&&&&&&&(最低位,还是最高位在先)&&&&&&&&
& uint16_t
SPI_CRCP&//设置crc多项式&&&&&&&
(数字)如7
}SPI_InitTypeD
下面是实例,对SPI2进行的初始化
SPI2_Init(void)&{
&SPI_InitTypeDef&
SPI_InitS&GPIO_InitTypeDef
GPIO_InitS
&//配置SPI2管脚
&RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO|RCC_APB2Periph_GPIOB,
&GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13
|GPIO_Pin_14| GPIO_Pin_15;
&GPIO_InitStructure.GPIO_Speed =
GPIO_Speed_50MHz;
&GPIO_InitStructure.GPIO_Mode =
GPIO_Mode_AF_PP;& //复用推挽输出
&GPIO_Init(GPIOB,
&GPIO_InitStructure);
&//SPI2配置选项
&RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2
&SPI_InitStructure.SPI_Direction =
SPI_Direction_2Lines_FullD
&SPI_InitStructure.SPI_Mode =
SPI_Mode_M
&SPI_InitStructure.SPI_DataSize =
SPI_DataSize_8b;
&SPI_InitStructure.SPI_CPOL = SPI_CPOL_H
&SPI_InitStructure.SPI_CPHA =
SPI_CPHA_2E
&SPI_InitStructure.SPI_NSS = SPI_NSS_S
&SPI_InitStructure.SPI_BaudRatePrescaler =
SPI_BaudRatePrescaler_16;
&SPI_InitStructure.SPI_FirstBit =
SPI_FirstBit_MSB;
&SPI_InitStructure.SPI_CRCPolynomial = 7;
&SPI_Init(SPI2,
&SPI_InitStructure);
&//使能SPI2
&SPI_Cmd(SPI2,
ENABLE);&&}
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
以上是,初始化的一些函数,发现固件库还有很多函数没用上,下面就要谈到应用了
STM32的SPI串行外围总线接口,本程序,是将STM32的SPI配置为全双工模式,且NSS使用的软件模式。在使用SPI前,下面的这个过程我们必须理解,即STM32作为主机发送一个字节数据时,必然能接收到一个数据,至于数据是否处理,由程序操作。
●&全双工模式(BIDIMODE=0并且RXONLY=0)&
─&&当写入数据到SPI_DR寄存器(发送缓冲器)后,传输开始;&
─&&在传送第一位数据的同时,数据被并行地从发送缓冲器传送到8位的移位寄存器中,
然后按顺序被串行地移位送到MOSI引脚上;&
─&&与此同时,在MISO引脚上接收到的数据,按顺序被串行地移位进入8位的移位寄存器
中,然后被并行地传送到SPI_DR寄存器(接收缓冲器)中。&
注意:也就是说,在主机模式下,发送和接收是同时进行的,所以我们发送了一个数据,也就能接收到一个数据。而STM32内部硬件是这个过程的支撑!
读一个字节,往里面发送0,外设就返回一个数据了,发送的0外设不处理(需要先写入命令生效)
SPI_ReadByte(SPIx)&SPI_WriteByte(SPIx,0)
写一个字节就直接发送相应的字节,外设就返回一个数据了
u8 SPI_WriteByte(SPI_TypeDef* SPIx,u8 byte);
写一个字节...................................................................
u8 SPI_WriteByte(SPI_TypeDef* SPIx,u8 Byte)
&while((SPIx-&SR&SPI_I2S_FLAG_TXE)==RESET);&&//等待发送区空&&
&SPIx-&DR=B&
&//发送一个byte&&
&while((SPIx-&SR&SPI_I2S_FLAG_RXNE)==RESET);//等待接收完一个byte&
SPIx-&DR;&&&&&&&&&
//返回收到的数据&&&
void M25P16_Write_Enable(void)
&Select_Flash();&
&SPI_Flash_Write(WRITE_ENABLE);&
&NotSelect_Flash();
void M25P16_Read_Id(u8 * id)
&Select_Flash();&
&SPI_Flash_Write(READ_ID);&
&for(i=0;i&20;i++)
SPI_Flash_Read();&&}
&NotSelect_Flash();
void M25P16_Write_Status_Reg(u8 reg)
&Select_Flash();&
&SPI_Flash_Write(WRITE_STAUS_REG);&
&SPI_Flash_Write(reg);&NotSelect_Flash();
void M25P16_Read_Data(u32 addr,u32 len,u8 *buf)
&Select_Flash();&
&SPI_Flash_Write(READ_DATA);&
&SPI_Flash_Write((addr&&16)
&SPI_Flash_Write((addr&&8)
&SPI_Flash_Write(addr &
&for(i=0;i&i++)
&&buf[i]=SPI_Flash_Read();
&}&NotSelect_Flash();
//页编程函数,页编程前一定要进行页擦除!!!
void M25P16_Page_Program(u32 addr,u16 len,u8 *buf)
&M25P16_Write_Enable();
&Select_Flash();&
&SPI_Flash_Write(PAGE_PROGRAM);&
&SPI_Flash_Write((addr&&16)
&SPI_Flash_Write((addr&&8)
&SPI_Flash_Write(addr &
&for(i=0;i&i++)
&&SPI_Flash_Write(buf[i]);
&NotSelect_Flash();
&while(M25P16_Read_Status_Reg()&0x01);&
以上函数搞懂了,特别市红色部分标注的为重点,对于spi也就基本清楚了,这些也算是最底层的函数了,提供基本的API供以后文件系统或其它地方使用。
----------------------------------------------------------------------------------------------
最后补上一些文件框架的说明
首先我们把最底层的SPI初始化写上,函数如下:
可见有芯片自带SPI模块&
有给mp3芯片的,有给flash的,还有给无线网络的,还有给软件模拟spi时序供给触摸屏的控制器的,然后我们把这个.c文件配套的.h文件给下面具体的函数包含,就能正确的选取和使用了,当这些具体功能的函数写好了后,对应得.h函数就又继续给更高级别的应用层使用。
今天先就介绍下spi_flash模块了,等天补上其它3个模块的讲解,毕竟现在是基础哦。
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。记录学习过程心得,分享错误经验方法。
STM32F103系统时钟配置
STM32F103系统时钟配置
时钟树的理解确定分频倍频之后再做
STM32F103时钟树
假设外接晶振8MHz,现在需要配置出系统72MHz时,需要
配置代码(外部晶振8MHz配置系统时钟为72MHz)
void RCC_Configuration(void)
RCC_DeInit();
RCC_HSEConfig(RCC_HSE_ON);
while(SUCCESS != RCC_WaitForHSEStartUp()){}
FLASH_SetLatency(FLASH_Latency_2);
FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);
RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);
RCC_PLLCmd(ENABLE);
while (RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET) {}
RCC_HCLKConfig(RCC_SYSCLK_Div1);
RCC_PCLK2Config(RCC_HCLK_Div1);
RCC_PCLK1Config(RCC_HCLK_Div2);
RCC_ADCCLKConfig(RCC_PCLK2_Div6);
FLASH_SetLatency(FLASH_Latency_2);
FLASH_HalfCycleAccessCmd(FLASH_HalfCycleAccess_Disable);
FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
void NVIC_Configuration(void)
NVIC_SetVectorTable(NVIC_VectTab_FLASH,0);
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
void bsp_init(void){
RCC_Configuration();
NVIC_Configuration();
SysTick_Config(72000);
没有更多推荐了,
加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!关于STM32F103的SPI,读操作的时候没有时钟是怎么回事? - STM32 - 意法半导体STM32/STM8技术社区
后使用快捷导航没有帐号?
查看: 5035|回复: 9
关于STM32F103的SPI,读操作的时候没有时钟是怎么回事?
在线时间16 小时
该用户从未签到主题帖子精华
中级会员, 积分 239, 距离下一级还需 261 积分
是不是我配置的有问题?我用的SPI1,配置代码如下
& && &&&SPI_InitTypeDef SPI_InitS
& && &&&RCC_APB2PeriphClockCmd(& && &&&RCC_APB2Periph_SPI1, ENABLE );& && &&&
& && &&&RCC_APB1PeriphClockCmd(& && &&&RCC_APB1Periph_SPI2, ENABLE );& && &&&
& && &&&/*失能*/
& && &&&SPI_I2S_DeInit(SPI1);
& && &&&SPI_I2S_DeInit(SPI2);
& && &&&SPI_InitStruct.SPI_CPHA = SPI_CPHA_2E& && && && && && && && && && && && && && && && && && && && && && && && && && && && && && && && && && &&&//数据捕获于第二个时钟沿
& && &&&SPI_InitStruct.SPI_CPOL = SPI_CPOL_H& && && && && && && && && && && && && && && && && && && && && && && && && && && && && && && && && && &&&//串行时钟的稳态:时钟悬空高
& && &&&SPI_InitStruct.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_16;& && &&&//定义波特率预分频的值:波特率预分频值为16& &(SPI 4.5M@sys 72M)
& && &&&SPI_InitStruct.SPI_CRCPolynomial = 7;& && && && && && && && && &&&//CRC值计算的多项式
& && &&&SPI_InitStruct.SPI_Direction = SPI_Direction_2Lines_FullD& &//SPI设置为双线双向全双工
& && &&&SPI_InitStruct.SPI_DataSize = SPI_DataSize_8b;& && && && && && &&&//SPI发送接收8位帧结构
& && &&&SPI_InitStruct.SPI_FirstBit = SPI_FirstBit_MSB;& && && && && && && && &&&//指定数据传输从MSB位还是LSB位开始:数据传输从MSB位开始
& && &&&SPI_InitStruct.SPI_Mode = SPI_Mode_M& && && && && && && && &//主模式
& && &&&SPI_InitStruct.SPI_NSS = SPI_NSS_S& && && && && && && && && && && && && & //NSS信号由硬件(NSS管脚)还是软件(使用SSI位)管理:内部NSS信号有SSI位控制
& && &&&SPI_Init(SPI1,&SPI_InitStruct);
& && &&&SPI_Cmd(SPI1, ENABLE);
(42.08 KB, 下载次数: 9)
11:54 上传
示波器观察的信号波形
(4.43 KB, 下载次数: 5)
11:54 上传
&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp
&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp
在线时间678 小时
ST金币4131
该用户从未签到主题帖子精华
帮顶。。。
在线时间16 小时
该用户从未签到主题帖子精华
中级会员, 积分 239, 距离下一级还需 261 积分
&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp
&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp
在线时间1680 小时
ST金币13175
该用户从未签到主题帖子精华
读操作要有MCU来写数据提供时钟啊。一般写0xff或者0x00到从设备来提供读取的时钟。
在线时间16 小时
该用户从未签到主题帖子精华
中级会员, 积分 239, 距离下一级还需 261 积分
读操作要有MCU来写数据提供时钟啊。一般写0xff或者0x00到从设备来提供读取的时钟。 ...
恩,多谢了,现在可以了,在示波器上显示的波形跟手册上写的返回值对应了,不过通过软件读出来的值一直是0xff,
&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp
&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp
在线时间1680 小时
ST金币13175
该用户从未签到主题帖子精华
恩,多谢了,现在可以了,在示波器上显示的波形跟手册上写的返回值对应了,不过通过软件读出来的值一直是 ...
那就好,通信没有问题的话就再找找其他的原因。
在线时间16 小时
该用户从未签到主题帖子精华
中级会员, 积分 239, 距离下一级还需 261 积分
那就好,通信没有问题的话就再找找其他的原因。
嗯嗯,好的,多谢帮忙
&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp
&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp
在线时间270 小时
ST金币2194
该用户从未签到主题帖子精华
金牌会员, 积分 4474, 距离下一级还需 526 积分
在线时间393 小时
ST金币2257
该用户从未签到主题帖子精华
恩,多谢了,现在可以了,在示波器上显示的波形跟手册上写的返回值对应了,不过通过软件读出来的值一直是 ...
SPI无非就那两个参数,不行就一个个试,也只要试4次。
&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp
&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp
在线时间16 小时
该用户从未签到主题帖子精华
中级会员, 积分 239, 距离下一级还需 261 积分
SPI无非就那两个参数,不行就一个个试,也只要试4次。
我用时钟第一个上升沿读取的话,读到ID是正确的,但其他寄存器读的是错的,用时钟第二个上升沿读的ID是错的,其他寄存器是正确的,,,很奇怪。之前没用过L3G4200,,不知道是否是这样
STM32粉丝勋章Ⅳ
狂欢节专属(智多星)
STM32粉丝勋章Ⅲ
狂欢节专属(分享宝宝)
STM32粉丝勋章Ⅰ
狂欢节专属(微信上墙)
STM32粉丝勋章Ⅱ
狂欢节专属(研讨会问答)
站长推荐 /2
Tel: 3-8064
备案号: 苏ICP备号-2
|||意法半导体STM32/STM8技术社区
Powered by查看: 13572|回复: 13
stm32f103 SPI1和SPI2进行通讯故障
主题帖子精华
初级会员, 积分 69, 距离下一级还需 131 积分
在线时间0 小时
我想用SPI1和SPI2直接进行单向通讯&
从机下 我是不是将SSM置位& 然后清零SSI 从机就会一直有效了& 大神们帮忙瞧瞧我下面俩个初始化 哪里有问题 求指点& 我现在两个SPI都没有反应 查看寄存器 时钟和相应位 已经配置成功了& 通讯一直没反应&
SPI1:从 只接收
SPI2:主 只发送
SPI2&&&&& SPI1&&&&
CLK-------&CLK
MOSI-----&MOSI
&void SPI2_Init(void)
{&//SPI2& PB12cs&& PB13SCK& PB14MISO& PB15MOSI
&&//GPIOB时钟已开启
&GPIOB-&CRH&=0x000
&GPIOB-&CRH|=0xBBB00000;
&GPIOB-&ODR|=0x7&&13;
&RCC-&APB1ENR|=1&&14; &//开启SPI2时钟
&SPI2-&CR1&=0;
&SPI2-&CR1|=(1&&14|1&&9|1&&6|1&&2);&// 只发 主机&& 开启SPI功能
&SPI2-&DR=0X45;
void SPI1_Init(void)
{&//SPI1& PA4cs&& PA5SCK& PA6MISO& PA7MOSI
&&//GPIOA时钟已开启
&GPIOA-&CRL&=0x000
&GPIOA-&CRL|=0xBBB00000;
&GPIOA-&ODR|=0x7&&5;
&RCC-&APB2ENR|=1&&12; &//开启SPI2时钟
&SPI1-&CR1&=0;
&SPI1-&CR1|=(1&&10|1&&9|1&&6);&// 只接收 从机 使能SSM 使能本地从机& 开启SPI功能
&SPI1-&CR2&=0;
&SPI1-&CR2|=1&&6;//使能接收中断
&MY_NVIC_Init(1,1,35,1);//开SPI1中断 向量号35& 类别:抢占1 子2 组2
我主机是这样发数据的
&&&while(1)
&&&SPI2-&DR=0x45;//在这里我给DR赋值& 在软件仿真下 DR的值是0 没被改成0x45& 因此SPI1的接收中断 也没有进去
& delay_ms(20);
现在运行起来 两个寄存器是这样的
0a4c967ea51cffdeaa2d1bcb7d.png (0 Bytes, 下载次数: 0)
22:54 上传
主题帖子精华
高级会员, 积分 900, 距离下一级还需 100 积分
在线时间277 小时
你的波特率设置不对。SPI1默认的是fpclk/2=72M/2=36M,但是SPI只能到18M.
博客:http://blog.csdn.net/feilusia
CC2541群();CC2640群();
Android群();STM8/STM32群();
Linux群();职场交流群();
主题帖子精华
初级会员, 积分 69, 距离下一级还需 131 积分
在线时间0 小时
回复【2楼】feilusia:
---------------------------------
恩恩&非常感谢&&我改一下&不晓得&其他的地方&配置的对不对&我先改下
主题帖子精华
高级会员, 积分 900, 距离下一级还需 100 积分
在线时间277 小时
回复【3楼】qingtian305:
---------------------------------
main()
{
&&&while(1)
{
&&&SPI2-&DR=0x45;//在这里我给DR赋值&&在软件仿真下&DR的值是0&没被改成0x45&&因此SPI1的接收中断&也没有进去
&&delay_ms(20);
}&
}
你主机就这么写?配置呢?
博客:http://blog.csdn.net/feilusia
CC2541群();CC2640群();
Android群();STM8/STM32群();
Linux群();职场交流群();
主题帖子精华
初级会员, 积分 69, 距离下一级还需 131 积分
在线时间0 小时
回复【4楼】feilusia:
---------------------------------
&//master
&void&SPI2_Init(void)
这里是主机的初始化
主题帖子精华
初级会员, 积分 69, 距离下一级还需 131 积分
在线时间0 小时
回复【2楼】feilusia:
---------------------------------
我现在&的系统时钟是用的内部的&然后倍频&现在是20M
主题帖子精华
高级会员, 积分 900, 距离下一级还需 100 积分
在线时间277 小时
回复【6楼】qingtian305:
---------------------------------
你两个波特率不一样。SPI1是在APB2上(=系统时钟),SPI2是在APB1上(=1/2系统时钟)。然后SPI默认配置下都是2分频,这时候你的SPI1是10M,你的SPI2是5M。
博客:http://blog.csdn.net/feilusia
CC2541群();CC2640群();
Android群();STM8/STM32群();
Linux群();职场交流群();
主题帖子精华
初级会员, 积分 69, 距离下一级还需 131 积分
在线时间0 小时
回复【7楼】feilusia:
---------------------------------
我是这样的&想用SPI1来接收单片机外部的一个SPI信号&只做接收&&那么&还要配置SPI从模式下的波特率吗&&那个外部的SPI波特率是未知的&这个传输的速度&不是由主机直接控制的吗&只要主机发CLK从机&就能收到主机发出的数据
主题帖子精华
高级会员, 积分 900, 距离下一级还需 100 积分
在线时间277 小时
回复【8楼】qingtian305:
---------------------------------
给你参考下我写的吧,主从公用一个函数,根据参数来决定是主还是从。下面这句放头文件里。
typedef&enum&{spi1_mode_slave&=&0,&spi1_mode_master&=&!spi1_mode_slave}&SPI1S
/*******************************************************************************
*&Function&Name:&SPI1_Configuration
*&Description&:&SPI模块包括相关IO口的配置
*&Input&&&&&&&:&spi1_mode:spi1_mode_master(主机),spi1_mode_slave(从机)
*&Output&&&&&&:&None
*&Return&&&&&&:&None
*******************************************************************************/
void&SPI1_Configuration(&SPI1Status&spi1_mode&)
{
RCC-&APB2ENR&|=&1&&2&&;&&&&&&& //PORTA时钟使能&&&
RCC-&APB2ENR&|=&1&&12&;&&&&&&& //SPI1时钟使能&
RCC-&APB2ENR&|=&1&&0&;&&&&&&&& //复用功能时钟使能&
GPIOA-&CRL&&=&0X000FFFFF&;&
GPIOA-&CRL&|=&0XBBB00000&;&&&& //一定要用推挽加上拉电阻,否则数据会有错!&&&
GPIOA-&ODR&|=&7&&5&;&&&&&&&&&& //PA567上拉
SPI1-&CR1&=&0x0000&;&&&&&&&&&& //SPI1-&CR1复位
SPI1-&CR1&|=&1&&9&&;&&&&&&&&&& //nss软件管理
SPI1-&CR1&|=&0&&11&;&&&&&&&&&& //数据格式:8bit
SPI1-&CR1&|=&1&&1&&;&&&&&&&&&& //CPOL=1:空闲模式下SCK为高电平&
SPI1-&CR1&|=&1&&0&&;&&&&&&&&&& //CPHA=1:数据采样从第二个时钟沿开始&&
SPI1-&CR1&|=&2&&3&&;&&&&&&&&&& //Fsck=Fcpu/8
SPI1-&CR1&|=&0&&7&&;&&&&&&&&&& //MSBfirst&
if(spi1_mode==spi1_mode_master) //若为主机模式
SPI1-&CR1&|=&0&&10&;&&&&&&&&&&//RXONLY:全双工模式
SPI1-&CR1&|=&0&&15&;&&&&&&&&&&//BIDIMODE:双线双向
SPI1-&CR1&|=&1&&8&&;
//nss高电平&
SPI1-&CR1&|=&1&&2&&;
SPI1-&CR2&|=&1&&1&&; &&&&&& //发送缓冲区DMA使能
else&if(spi1_mode==spi1_mode_slave) //从机模式
SPI1-&CR1&|=&1&&10&;&&&&&&&&&&//RXONLY:只接收模式
SPI1-&CR1&|=&0&&15&;&&&&&&&&&&//BIDIMODE:双线双向
SPI1-&CR1&&=&~(1&&8)&&;&&&&& //nss低电平&
SPI1-&CR1&&=&~(1&&2)&&;&&&&& //SPI从机
SPI1-&CR2&|=&1&&0&&; &&&&&
//接收缓冲区DMA使能
SPI1-&CR2&|=&1&&6&&;&&&&&&&&&&//SPI接收中断使能
SPI1-&CR1&|=&1&&6&&;&&&&&&&&&& //SPI设备使能
博客:http://blog.csdn.net/feilusia
CC2541群();CC2640群();
Android群();STM8/STM32群();
Linux群();职场交流群();
主题帖子精华
初级会员, 积分 69, 距离下一级还需 131 积分
在线时间0 小时
回复【9楼】feilusia:
---------------------------------
恩恩&&我现在&发现个问题&&我就是写那个SPI为主的时候&那个MASTER位被写为1后&会立刻变成0&&我硬件有点问题
主题帖子精华
初级会员, 积分 69, 距离下一级还需 131 积分
在线时间0 小时
回复【10楼】qingtian305:
---------------------------------
可以通讯了&&原因出在&主机配置上&SSI没有置位&&不过我发送0x45&&中断里&接收到的是0x4d
主题帖子精华
初级会员, 积分 69, 距离下一级还需 131 积分
在线时间0 小时
终于搞定了&&真是&时钟的事
主题帖子精华
中级会员, 积分 275, 距离下一级还需 225 积分
在线时间21 小时
mark一下,这种问题要引起重视了
主题帖子精华
初级会员, 积分 96, 距离下一级还需 104 积分
在线时间22 小时
大家好 测试了下SPI的SCK时钟线,发现是这样的。下面蓝色的是SCK,感觉很奇怪。时钟之间多了一个脉冲,怎么回事,求解
(1.75 MB, 下载次数: 28)
17:27 上传
Powered bystm32f103外接时钟不能用求助_百度知道
stm32f103外接时钟不能用求助
我有更好的答案
SPI总线为四根线,为MISO,MOSI,SCK,NSS,但在实际应用中可减少。就比如你的情况,但是最少需要两个线,SCK是必须的,另一根为MOSI其为主机输出,从机输入。
为您推荐:
其他类似问题
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。}

我要回帖

更多关于 求一款能读秒的时钟 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信