新手上路
- 积分
- 42
- 金钱
- 42
- 注册时间
- 2016-9-25
- 在线时间
- 13 小时
|
10金钱
本帖最后由 1826940651 于 2016-11-16 20:43 编辑
这是我测量的片选信号和发送数据的信号,黄色为片选,按照程序的话应该有25个低电平,选中25次,但是测量出来只有三次,不知道为什么会这样,求高手指点,感激涕零!
下面是程序:
#include "spi.h"
#include "delay.h"
//////////////////////////////////////////////////////////////////////////////////
//3õê¼»ˉ
void SPI_Config(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_11; //分别是时钟,片选,主机数据输出MOSI
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
GPIO_InitStructure.GPIO_Mode= GPIO_Mode_Out_PP; //推挽输出
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; //MISO
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
GPIO_InitStructure.GPIO_Mode= GPIO_Mode_IPD;
CS=1; //初始化将片选拉高
SCK=0; //时钟空闲
MOSI=0;
}
//写时序
void SPI_RW(u8 data)
{
u8 t;
SCK=0;//时钟空闲
for(t=0;t<8;t++)
{
if(data&0x80)MOSI=1;
else MOSI=0;
SCK=1; //上升沿发送数据
delay_us(2); //稳定数据
data<<=1; //数据左移
if(MISO_Read)
{
data |= 1;
}
delay_us(2); //延时稳定数据
SCK=0; //时钟空闲
}
}
//给寄存器写数据
//reg:寄存器地址
//data32:要写的数据
void SPI_RW_Reg(u8 reg, u32 Data32)
{
u8 i=0;
u8 Data8[4]={0x00,0x00,0x00,0x00};
Data8[0]=(Data32>>24)&0xff;
Data8[1]=(Data32>>16)&0xff;
Data8[2]=(Data32>>8)&0xff;
Data8[3]=Data32&0xff;
CS=0; //片选拉低,选中器件,开始发送数据
SPI_RW(reg);
for(i=0;i<4;i++)
{
SPI_RW(Data8);
}
CS=1; //片选拉高,停止发送数据
}
=================主函数====
#include "usart.h"
#include "spi.h"
#include "led.h"
u8 Register[25]={0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F,0x010,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F}; //寄存器地址
u32 data[25]={0xa018,0xa00c,0xa018,0xa018,0xa00c,0xa00c,0x2222000,0x888900,0x22000,0x2aaaaaa,0x4c20a08,0x1a00880,0x986003,0x1181413,0x100000,0x4000400,0x60aa820,0x2,0x164e20,0x57d4000,0x8000f0,0x100f0,0x40096,0x100096,0xf800}; //要发送的数据
int main(void)
{
u8 i;
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置中断优先级分组
delay_init(); //初始化延时
LED_Init();
uart_init(9600); //串口初始化
SPI_Config(); //SPI 配置
delay_ms(2);
for(i=0;i<25;i++)
{
SPI_RW_Reg(Register,data); 给寄存器写数据
}
}
|
-
|