资源简介
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安全验证
相关资源
- stm32输出锯齿波,频率可调
- STM32F103四个通用定时器编码器模式配
- stm32+MAX7219数码管模块显示程序 spi接口
- stm32和rfid读卡器模块
- LD3320语音识别模块stm32例程调试
- AN3155 STM32 bootloader协议ISP
- 数据手套数据包格式
- STM32短信接收发送TEXT
- ADA2200驱动
- Cortex-M3 反汇编器
- STM32F103ZET6原理图
- STM32L053C8T6驱动240×240彩屏钟表显示时
- STM32 AD7124
- ADS8688的STM32驱动代码
- stm32f103c8t6 最小系统 开发板 AD电路图
- stm32 modbus
- STM32 4*4矩阵键盘扫描方式
- STM32F103 AM2302温湿度模块驱动例程
- STM32F103 NRF24L01无线通讯模块驱动例程
- DHT11与STM32F103ZET6
- stm32f103的PCF8563驱动代码
- STM32并口、串口驱动12864
- STM32F1+PS2+Serial+PWM (KEIL5)
- STM32f103zet6.Schlib 器件原理图 封装 Al
- 基于stm32的血压算法
- STM32F103串口DMA接收
- STM32 DMA中断模式下ADC多通道数据采集
- 通过PID算法控制STM32的PWM输出
- 1602液晶可靠的4位数据线方式驱动_基
- 嵌入式平台 STM32 libqrencode 移植二维码
评论
共有 条评论