环境:
主机:WIN7
开发环境:MDK4.23
MCU:STM32F103CBT6
说明:
软件设置NSS脚,利用查询方式传输
源代码:
初始化代码:
//关闭SPI
SPI_Cmd(SPI1,DISABLE);
//初始化SPI接口的SSN脚以及NTRX的RST脚
NtrxCtrlInit();
//初始化SPI时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1 | RCC_APB2Periph_GPIOA,ENABLE);
//配置SPI1引脚:SCK, MISO and MOSI
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP ;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz ;
GPIO_Init( GPIOA, &GPIO_InitStructure );
// SPI1配置
SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex ;
SPI_InitStructure.SPI_Mode = SPI_Mode_Master ;
SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b ;
SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low ;
SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge ;
SPI_InitStructure.SPI_NSS = SPI_NSS_Soft ;
//SPI波特率分频设置:4M
SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_8 ;
//SPI设置成LSB模式
SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_LSB ;
SPI_InitStructure.SPI_CRCPolynomial = 7 ;
SPI_Init( SPI1, &SPI_InitStructure ) ;
//启动SPI
SPI_Cmd(SPI1,ENABLE);
发送代码:
//SPI发送一个字节
static uint8 SPI_SendByte(uint8 Data)
{
// Loop while DR register in not emplty
while( SPI_I2S_GetFlagStatus( SPI1, SPI_I2S_FLAG_TXE ) == RESET ) ;
// Send byte through the SPI1 peripheral
SPI_I2S_SendData( SPI1, Data ) ;
// Wait to receive a byte
while( SPI_I2S_GetFlagStatus( SPI1, SPI_I2S_FLAG_RXNE ) == RESET ) ;
// Return the byte read from the SPI bus
return SPI_I2S_ReceiveData( SPI1 ) ;
}
接收代码:
//SPI读取一个字节
void SPI_ReadBytes( uint8 Addr, NtrxBufferPtr Buffer, uint8 Len )
{
if( ( Len > 0x80 ) || ( Len == 0 ) )
Len = 1 ;
SPI_SendByte( Len ) ;
SPI_SendByte( Addr ) ;
while( Len-- )
{
*Buffer = SPI_SendByte( 0xFF ) ;
Buffer ++ ;
}
}
NSS脚电平设置:
//SSN脚拉低,开始发送数据
void NtrxSSN_Lo( void )
{
GPIO_ResetBits( NTRX_SSN_PORT, NTRX_SSN_PIN ) ;
}
//SSN脚置高,结束发送数据
void NtrxSSN_Hi( void )
{
GPIO_SetBits( NTRX_SSN_PORT, NTRX_SSN_PIN ) ;
}
示例代码:
uint8 NtrxReadSingleSPI( uint8 Addr )
{
NtrxBufferType r ;
NtrxSSN_Lo() ;
SPI_ReadBytes( Addr, &r, 1 ) ;
NtrxSSN_Hi() ;
return r ;
}
输出:
黄线为NSS脚电平,蓝线为CLK电平.
关键字:STM32 SPI 查询方式 传输测试
引用地址:
STM32的SPI查询方式传输测试
推荐阅读最新更新时间:2024-03-16 14:56
stm32之重映射与地址映射
重映射 stm32中对于一些端口的外设已经被其他引脚所使用,这是就需要用端口重映射来解决了,很方便。 以USART1为例 重映射的步骤为: 打开重映射时钟和USART重映射后的I/O口引脚时钟, RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO,ENABLE); I/O口重映射开启. GPIO_PinRemapConfig(GPIO_Remap_USART1,ENABLE); 配制重映射引脚, 这里只需配置重映射后的I/O,原来的不需要去配置. GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6; GPI
[单片机]
stm32中断服务函数名称表速查
*参考启动文件 startup_stm32f10x_xl.s 中断服务函数名(固定) 匹配对象 WWDG_IRQHandler Window Watchdog PVD_IRQHandler PVD through EXTI Line detect TAMPER_IRQHandler Tamper RTC_IRQHandler RTC FLASH_IRQHandler Flash RCC_IRQHandler RCC EXTI0_IRQHandler EXTI Line 0 EXTI1_IRQHandler EXTI Line 1 EXTI2_IRQHandler EXTI Line 2 EXTI3_IRQHandler EXT
[单片机]
stm32 TIM定时器[操作寄存器+库函数]
stm32配备了2个高级定时器TIM1和TIM8,4个通用定时器 TIM2,TIM3,TIM4和TIM5,还有两个基本定时器TIM6和TIM7。 高级定时器常用于电机控制,因为其加入了死区控制,紧急制动,定时器同步等高级特性。基本定时器可以为数模转化器提供准确的时间基准。 stm32的通用定时器由一个通过可编程预分频器驱动的16位自动装载计数器构成。通用定时器可以用于测量输入信号的脉冲长度(输入捕获)或者产生输出波形(输出比较和PWM)等。 通用计时器的使用,需要先配置一个时基单元,就是设定一个基准时间,确定计数一次耗去的时间,可以设定在几个微妙到几个毫秒之间。 通用定时器的都有4个独立通道(TIMx_CH1~4),这
[单片机]
Keil5软件配置与新建STM32工程的步骤
新建工程文件夹 建立名字为LED的文件夹存放工程文件,其中再建立两个文件夹,Listing文件夹用于存放编译器编译时候产生的C语言、汇编、链接文件,Output文件夹用于存放编译产生的调试信息、hex文件、预览信息、封装库等。 文件夹建好之后,在LED文件夹下存放startup_stm32f10x_hd.s、stm32f10x.h、main.c文件。前两个文件可以在STM32F1xx的固件库中找到,第三个文件是空文件。 在Keil5中新建工程的步骤 如下图所示,Project-New,新建工程,工程名为Led,点击保存。 点击保存之后,弹出如下窗口,选择芯片型号。根据你开发板使用的芯片具体的型号来选择。如果这里没有出现你
[单片机]
STM32 DMA 知识讲解
DMA,全称为:DirectMemoryAccess,即直接存储器访问,DMA传输将数据从一个地址空间复制到另外一个地址空间。当CPU初始化这个传输动作,传输动作本身是由DMA控制器来实行和完成。典型的例子就是移动一个外部内存的区块到芯片内部更快的内存区。像是这样的操作并没有让处理器工作拖延,反而可以被重新排程去处理其他的工作。DMA传输对于高效能嵌入式系统算法和网络是很重要的。DMA传输方式无需CPU直接控制传输,也没有中断处理方式那样保留现场和恢复现场的过程,通过硬件为RAM与I/O设备开辟一条直接传送数据的通路,能使CPU的效率大为提高。DMA是个非常好的功能,它不但能减轻CPU负担,还能提高数据传输速度. STM32最
[单片机]
STM32+移远MC20模块采用MQTT协议登录OneNet上传GPS数据
一、环境介绍 MCU: STM32F103C8T6 GSM模块: 移远MC20 (MT2503D)(GSM+GPS共存)功能很强大 开发软件: Keil5 MQTT协议采用OneNet的旧版协议,登录OneNet控制台创建应用时要选择旧版本。 如果想使用新版本的标准MQTT协议连接OnetNet请参考这里: https://blog.csdn.net/xiaolong1126626497/article/details/107385118 完整源代码下载: https://download.csdn.net/download/xiaolong1126626497/18245206 二、MC20模块
[单片机]
【STM32】IIC基本原理(实例:普通IO口模拟IIC时序读取24C02)
IIC的基本介绍 IIC的简介 IIC(Inter-Integrated Circuit)总线是一种由PHILIPS公司在80年代开发的两线式串行总线,用于连接微控制器及其外围设备。它是半双工通信方式。 IIC总线最主要的优点是其简单性和有效性。由于接口直接在组件之上,因此IIC总线占用的空间非常小,减少了电路板的空间和芯片管脚的数量,降低了互联成本。总线的长度可高达25英尺,并且能够以10Kbps的最大传输速率支持40个组件。 IIC总线的另一个优点是,它支持多主控(multimastering), 其中任何能够进行发送和接收的设备都可以成为主总线。一个主控能够控制信号的传输和时钟频率。当然,在任何时间点上只能有一个主控。
[单片机]
STM32的JTAG引脚说明
STM32的PA3、PA4、PA13、PA14、PA15,是JTAG用的引脚 若要当作普通IO口使用,则需要配置 在管脚初始化中加入 GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE); 其中 GPIO_Remap_SWJ_NoJTRET 除JTRST外SWJ完全使能(JTAG+SWJ); GPIO_Remap_SWJ_JTAGDisable JTAG-DP失能+SW-DP使能; GPIO_Remap_SWJ_Disable SWJ完全失能(JTAG+SW-DP); 上电复位后IO端口被配置为浮空输出模式; JTAG引脚被置于输入上拉或下拉
[单片机]