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

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管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版