STM32F051R8 硬件SPI問題
請問各位高手,目前使用SPI1控制93C46(128X8)但是控制命令+address共10BIT我該如何送命令呢?stm32f051r8pa5:sck, pa6:miso, pa7:mosi, pa4:csstart bit=1 op code=10A6 A5 A4 A3 A2 A1 A0 --> (read)
read: 1100000000 先送出(0xC0)再送(0x00)對嗎?還是先送(0X03)再送(0X00)?
SPI_DataSize_10b對嗎?還是要設成SPI_DataSize_8b?
麻煩各位高手指點一下小弟....:L
void SPI_INIT(void)
{
SPI_InitTypeDef SPI_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1,ENABLE);
SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
SPI_InitStructure.SPI_Mode = SPI_Mode_Master;
SPI_InitStructure.SPI_DataSize = SPI_DataSize_10b;
SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low;
SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge;
SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;
SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_128;
SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;
SPI_InitStructure.SPI_CRCPolynomial = 7;
SPI_Init(SPI1, &SPI_InitStructure);
SPI_RxFIFOThresholdConfig(SPI1, SPI_RxFIFOThreshold_QF);
SPI_SSOutputCmd(SPI1, ENABLE);
SPI_Cmd(SPI1,ENABLE);
}
设置成SPI_DataSize_10b模式,10位拆分位两个字节,先送(0X03)再送(0X00),你试下就可以了 奔跑小蜗牛 发表于 2014-12-23 17:43
设置成SPI_DataSize_10b模式,10位拆分位两个字节,先送(0X03)再送(0X00),你试下就可以了 ...
好的我試看看.....:D 奔跑小蜗牛 发表于 2014-12-23 17:43
设置成SPI_DataSize_10b模式,10位拆分位两个字节,先送(0X03)再送(0X00),你试下就可以了 ...
我先送0x03那前面都是0 (00000011),這樣93c46的start bit 1可以被判斷出來嗎?我試過先送0x03,0x00還是不行耶....:( 那就SPI_DataSize_16b,直接发两个字节! 晓枫VS枯叶 发表于 2014-12-23 20:35
那就SPI_DataSize_16b,直接发两个字节!
你是說直接送(0xC000)還是(0x0300)?可是命令+address共10bit那多出來的如何處理呢?
datasheet上說明read : 1 10 a6 a5 a4 a3 a2 a1 a0--->?該如何送? willie 发表于 2014-12-23 20:41
你是說直接送(0xC000)還是(0x0300)?可是命令+address共10bit那多出來的如何處理呢?
datasheet上說明read...
datasheet上說明read : 1 10 a6 a5 a4 a3 a2 a1 a0数据手册上怎么没查到 wambob 发表于 2014-12-23 22:56
datasheet上說明read : 1 10 a6 a5 a4 a3 a2 a1 a0数据手册上怎么没查到
void SPI2_Init(void)
{
SPI_InitTypeDefSPI_InitStructure;
GPIO_InitTypeDef GPIO_InitStructure;
//配置SPI2管脚
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO|RCC_APB2Periph_GPIOB, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13 |GPIO_Pin_14| GPIO_Pin_15;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;//复用推挽输出
GPIO_Init(GPIOB, &GPIO_InitStructure);
//SPI2配置选项
RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2 ,ENABLE);
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_High;
SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge;
SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;
SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_16;
SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;
SPI_InitStructure.SPI_CRCPolynomial = 7;
SPI_Init(SPI2, &SPI_InitStructure);
//使能SPI2
SPI_Cmd(SPI2, ENABLE);
}
有逻辑分析仪吗?看下通讯波形对不对。还是不行就直接IO 模拟spi,一定可以,程序好多现成的 先看一下你的管脚配连接是否正确,再用示波器观察一下波形,先发0X03再发0X00
页:
[1]
2