踏踏实实搞清&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 上传
            
      
在线时间678 小时
ST金币4131
该用户从未签到主题帖子精华
帮顶。。。
在线时间16 小时
该用户从未签到主题帖子精华
中级会员, 积分 239, 距离下一级还需 261 积分
            
      
在线时间1680 小时
ST金币13175
该用户从未签到主题帖子精华
读操作要有MCU来写数据提供时钟啊。一般写0xff或者0x00到从设备来提供读取的时钟。
在线时间16 小时
该用户从未签到主题帖子精华
中级会员, 积分 239, 距离下一级还需 261 积分
读操作要有MCU来写数据提供时钟啊。一般写0xff或者0x00到从设备来提供读取的时钟。 ...
恩,多谢了,现在可以了,在示波器上显示的波形跟手册上写的返回值对应了,不过通过软件读出来的值一直是0xff,
            
      
在线时间1680 小时
ST金币13175
该用户从未签到主题帖子精华
恩,多谢了,现在可以了,在示波器上显示的波形跟手册上写的返回值对应了,不过通过软件读出来的值一直是 ...
那就好,通信没有问题的话就再找找其他的原因。
在线时间16 小时
该用户从未签到主题帖子精华
中级会员, 积分 239, 距离下一级还需 261 积分
那就好,通信没有问题的话就再找找其他的原因。
嗯嗯,好的,多谢帮忙
            
      
在线时间270 小时
ST金币2194
该用户从未签到主题帖子精华
金牌会员, 积分 4474, 距离下一级还需 526 积分
在线时间393 小时
ST金币2257
该用户从未签到主题帖子精华
恩,多谢了,现在可以了,在示波器上显示的波形跟手册上写的返回值对应了,不过通过软件读出来的值一直是 ...
SPI无非就那两个参数,不行就一个个试,也只要试4次。
            
      
在线时间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其为主机输出,从机输入。
为您推荐:
其他类似问题
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。}