
我是用STM32控制,求程序,模拟时序或硬件,IIC或SPI也都可以?
1个回答
2013-06-09
展开全部
#include "stm32f10x.h"
#include "stm32f10x_spi.h"
u16 ReceivedData;
GPIO_InitTypeDef GPIO_InitStructure;//定义GPIO初始化结构体
SPI_InitTypeDef SPI_InitStructure; //定义SPI结构体
void Delay(__IO uint32_t nCount);
void SPI_Config(void)
{
/* 使能 SPI2和GPIOA时钟 */
RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1 ,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
/*配置 SPI2管脚的: SCK, MISO , MOSI */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_Init(GPIOA, &GPIO_InitStructure);
/* SPI2 设置 */
SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;//SPI设置为双线双向全双工
SPI_InitStructure.SPI_Mode = SPI_Mode_Master; //设置为主SPI
SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;//SPI发送接收8位帧结构
SPI_InitStructure.SPI_CPOL = SPI_CPOL_High;//设置时钟悬空时为高电平
SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge;//数据捕获于第二个时钟沿
SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;//NSS信号由软件(使用SSI位)管理
SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_16;//波特率预分频值为16
SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;//数据传输从MSB位开始
SPI_InitStructure.SPI_CRCPolynomial = 7;//CRC值计算的多项式为7
SPI_Init(SPI2, &SPI_InitStructure);//根据参数初始化SPI2设备
SPI_Cmd(SPI2, ENABLE);
}int main(void)
{
SystemInit();//系统时钟设置
while (1)
{
SPI_I2S_SendData(SPI2,0xaf);//发送数据
ReceivedData = SPI_I2S_ReceiveData(SPI2);
Delay(5000);
}
}
#include "stm32f10x_spi.h"
u16 ReceivedData;
GPIO_InitTypeDef GPIO_InitStructure;//定义GPIO初始化结构体
SPI_InitTypeDef SPI_InitStructure; //定义SPI结构体
void Delay(__IO uint32_t nCount);
void SPI_Config(void)
{
/* 使能 SPI2和GPIOA时钟 */
RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1 ,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
/*配置 SPI2管脚的: SCK, MISO , MOSI */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_Init(GPIOA, &GPIO_InitStructure);
/* SPI2 设置 */
SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;//SPI设置为双线双向全双工
SPI_InitStructure.SPI_Mode = SPI_Mode_Master; //设置为主SPI
SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;//SPI发送接收8位帧结构
SPI_InitStructure.SPI_CPOL = SPI_CPOL_High;//设置时钟悬空时为高电平
SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge;//数据捕获于第二个时钟沿
SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;//NSS信号由软件(使用SSI位)管理
SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_16;//波特率预分频值为16
SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;//数据传输从MSB位开始
SPI_InitStructure.SPI_CRCPolynomial = 7;//CRC值计算的多项式为7
SPI_Init(SPI2, &SPI_InitStructure);//根据参数初始化SPI2设备
SPI_Cmd(SPI2, ENABLE);
}int main(void)
{
SystemInit();//系统时钟设置
while (1)
{
SPI_I2S_SendData(SPI2,0xaf);//发送数据
ReceivedData = SPI_I2S_ReceiveData(SPI2);
Delay(5000);
}
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询