你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32F051R8 硬件SPI問題

[复制链接]
willie 提问时间:2014-12-23 16:59 /
請問各位高手,目前使用SPI1控制93C46(128X8)但是控制命令+address共10BIT我該如何送命令呢?stm32f051r8  pa5:sck, pa6:miso, pa7:mosi, pa4:cs  

start bit=1   op code=10  A6 A5 A4 A3 A2 A1 A0 --> (read)
read: 1100000000 先送出(0xC0)再送(0x00)對嗎?還是先送(0X03)再送(0X00)?


SPI_DataSize_10b對嗎?還是要設成SPI_DataSize_8b?
麻煩各位高手指點一下小弟....

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);

}


收藏 评论13 发布时间:2014-12-23 16:59

举报

13个回答
奔跑小蜗牛 回答时间:2014-12-23 17:43:48
设置成SPI_DataSize_10b模式,10位拆分位两个字节,先送(0X03)再送(0X00),你试下就可以了
willie 回答时间:2014-12-23 18:01:03
奔跑小蜗牛 发表于 2014-12-23 17:43
设置成SPI_DataSize_10b模式,10位拆分位两个字节,先送(0X03)再送(0X00),你试下就可以了 ...

好的我試看看.....
willie 回答时间:2014-12-23 20:23:33
奔跑小蜗牛 发表于 2014-12-23 17:43
设置成SPI_DataSize_10b模式,10位拆分位两个字节,先送(0X03)再送(0X00),你试下就可以了 ...

我先送0x03那前面都是0 (00000011),這樣93c46的start bit 1可以被判斷出來嗎?我試過先送0x03,0x00還是不行耶....
晓枫VS枯叶 回答时间:2014-12-23 20:35:26
那就SPI_DataSize_16b,直接发两个字节!
willie 回答时间:2014-12-23 20:41:46
晓枫VS枯叶 发表于 2014-12-23 20:35
那就SPI_DataSize_16b,直接发两个字节!

你是說直接送(0xC000)還是(0x0300)?可是命令+address共10bit那多出來的如何處理呢?
datasheet上說明read : 1 10 a6 a5 a4 a3 a2 a1 a0--->?該如何送?
wambob 回答时间:2014-12-23 22:56:08
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:58:59
wambob 发表于 2014-12-23 22:56
datasheet上說明read : 1 10 a6 a5 a4 a3 a2 a1 a0数据手册上怎么没查到

void SPI2_Init(void)
{
SPI_InitTypeDef  SPI_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);  
}

奔跑小蜗牛 回答时间:2014-12-24 12:29:57
有逻辑分析仪吗?看下通讯波形对不对。还是不行就直接IO 模拟spi,一定可以,程序好多现成的
小贾-370388 回答时间:2014-12-24 13:09:39
先看一下你的管脚配连接是否正确,再用示波器观察一下波形,先发0X03再发0X00
12下一页
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版