资源简介
STM32 模拟SPI 一主多从

代码片段和文件信息
#include “TestSPI.h“
/* SPI端口初始化 */
void SPI1_Init()
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_AHB1PeriphClockCmd(SPI_CLK_PERIPH ENABLE); // 使能GPIO时钟
RCC_AHB1PeriphClockCmd(SPI_MISO_PERIPH ENABLE); // 使能GPIO时钟
RCC_AHB1PeriphClockCmd(SPI_MOSI_PERIPH ENABLE); // 使能GPIO时钟
RCC_AHB1PeriphClockCmd(LSM303D_SPI_NSS_PERIPH ENABLE); // 使能GPIO时钟
RCC_AHB1PeriphClockCmd(L3GD20_SPI_NSS_PERIPH ENABLE); // 使能GPIO时钟
//SPI CLK GPIO设置
GPIO_InitStructure.GPIO_Pin = SPI_CLK_PIN;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; // 上拉
GPIO_Init(SPI_CLK_PORT &GPIO_InitStructure);
//SPI MOSI GPIO设置
GPIO_InitStructure.GPIO_Pin = SPI_MOSI_PIN;
GPIO_Init(SPI_MOSI_PORT &GPIO_InitStructure);
//SPI L3GD20 NSS GPIO设置
GPIO_InitStructure.GPIO_Pin = L3GD20_SPI_NSS_PIN;
GPIO_Init(L3GD20_SPI_NSS_PORT &GPIO_InitStructure);
//SPI LSM303D NSS GPIO设置
GPIO_InitStructure.GPIO_Pin = LSM303D_SPI_NSS_PIN;
GPIO_Init(LSM303D_SPI_NSS_PORT &GPIO_InitStructure);
//SPI MISO GPIO设置
GPIO_InitStructure.GPIO_Pin = SPI_MISO_PIN;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;
GPIO_Init(SPI_MISO_PORT &GPIO_InitStructure);
//拉低SCK和MOSI
GPIO_ResetBits(SPI_CLK_PORT SPI_CLK_PIN); // 拉低
GPIO_ResetBits(SPI_MOSI_PORT SPI_MOSI_PIN); // 拉低
//拉高片选线
GPIO_SetBits(LSM303D_SPI_NSS_PORT LSM303D_SPI_NSS_PIN); // 拉高
GPIO_SetBits(L3GD20_SPI_NSS_PORT L3GD20_SPI_NSS_PIN); // 拉高
}
/*
LSM303D使能
enable:为1时,使能信号有效,SS低电平
为0时,使能信号无效,SS高电平
*/
void LSM303D_SS_Enable(int enable)
{
if (enable)
{
GPIO_ResetBits(LSM303D_SPI_NSS_PORT LSM303D_SPI_NSS_PIN); //SS低电平,从设备使能有效
}
else
{
GPIO_SetBits(LSM303D_SPI_NSS_PORT LSM303D_SPI_NSS_PIN); //SS高电平,从设备使能无效
}
}
/*
L3GD20使能
enable:为1时,使能信号有效,SS低电平
为0时,使能信号无效,SS高电平
*/
void L3GD20_SS_Enable(int enable)
{
if (enable)
{
GPIO_ResetBits(L3GD20_SPI_NSS_PORT L3GD20_SPI_NSS_PIN); //SS低电平,从设备使能有效
}
else
{
GPIO_SetBits(L3GD20_SPI_NSS_PORT L3GD20_SPI_NSS_PIN); //SS高电平,从设备使能无效
}
}
// 设置GPIO的值
void Set_GPIO_Value(GPIO_TypeDef* GPIOx uint16_t GPIO_Pin uint8_t Value)
{
if (Value)
{
GPIO_SetBits(GPIOx GPIO_Pin); //SS高电平,从设备使能无效
}
else
{
GPIO_ResetBits(GPIOx GPIO_Pin); //SS低电平,从设备使能有效
}
}
uint8_t Simulate_SPI_SendByte(uint8_t dt)
{
u8 i = 0 temp = 0 nMISO = 0;
for(i = 8; i > 0; i--)
{
if(dt & 0x80)
{
Set_GPIO_Value(SPI_MOSI_PORT SPI_MOSI_PIN 1);//MOSI_H;
}
else
{
Set_GPIO_Value(SPI_MOSI_PORT SPI_MOSI_PIN 0);//MOSI_L;
}
dt <<= 1;
Set_GPIO_Value(SPI_CLK_PORT SPI_CLK_PIN 1);//SCLK_H;
__nop();
__nop();
__nop();
temp <<= 1;
nMISO = GPIO_ReadInputDataBit(SPI_MISO_PORT SPI_MISO_PIN);
if(nMISO)
{
temp++;
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 3353 2016-05-26 20:21 SimulationSPI1\TestSPI.c
文件 1275 2016-05-26 20:16 SimulationSPI1\TestSPI.h
目录 0 2016-05-26 20:29 SimulationSPI1
----------- --------- ---------- ----- ----
4628 3
- 上一篇:Cadence 16.3及完美破解的地址
- 下一篇:CXF实现SSL安全验证
相关资源
- STM32F103RC+ADC+DMA多通道采样LCD显示
- I2C读写AT24C02 基于STM32F103 cube116540
- 基于stm32f103ve的程序——跑马灯实验
- 基于STM32RCT6的步进电机驱动程序
- stm32f407上的两个can发送和接收例程
- STM32 led 时钟
- STM32 2.4G通信例程
- 直流无刷电机方波驱动 stm32 例程代码
- STM32中文资料
- STM32蓝牙和串口程序
- STM32f103超声波模块例程
- stm32f103c8t6 4 oled.rar
- stm32f030 IAP Demo(原创)
- STM32基于rt_thread操作系统的SDHC卡文件
- 51模拟SPI读写SD卡(包括Fat和Fat32文件
- NRF24L01实现51与STM32双向通讯
- STM32F103 串口程序(完整版)
- stm32 ds18b20 温度传感器 测试通过
- stm32官方例程
- STM32F103定时器中断程序
- [免费]基于stm32f103ze 的OLED驱动代码
- STM32F103RBT6驱动UC1698控制芯片的160160黑
- STM32F103 DS18B20 V3.5.0固件库驱动程序工
- STM32定时器使用入门。看了这个程序会
- SIM908 SDIO FSMC STM32 FIFO
- STM32F103 CC2500完整驱动(模拟SPI)
- AD7606采集程序
- stm32 用SPI 方式读写 SDHC
- stm32通过DMA方式采集ADC数据
- 意法半导体STM全系列微控制器STM32ST
评论
共有 条评论