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

查看: 6620|回复: 9

STM32 SPI 问题 【悬赏问答】

[复制链接]

1

主题

22

回帖

0

蝴蝶豆

新手上路

最后登录
1970-1-1
发表于 2012-11-18 21:07:13 | 显示全部楼层 |阅读模式
我用STM32F4的SPI操作


unsigned char XPT2046_SendByte(unsigned char byte)
{
  /* Loop while DR register in not emplty */
  while (SPI_I2S_GetFlagStatus(SPI3, SPI_I2S_FLAG_TXE) == RESET);


  /* Send Half Word through the SPI3 peripheral */
  SPI_I2S_SendData(SPI3, byte);


  /* Wait to receive a Half Word */
  while (SPI_I2S_GetFlagStatus(SPI3, SPI_I2S_FLAG_RXNE) == RESET);


  /* Return the Half Word read from the SPI bus */
  return SPI_I2S_ReceiveData(SPI3);
}
 
发送一个字节的时候,一直卡在红色的那句,不知怎么回事,求教~
 
回复

使用道具 举报

24

主题

591

回帖

0

蝴蝶豆

中级会员

最后登录
2020-12-2
发表于 2012-11-18 22:34:29 | 显示全部楼层

RE:STM32 SPI 问题

你看看,你有按这个步骤做吗?你看看是不是之前的设置那里不正确了,实际上数据没有能正确发出。
1:当一字节写进发送缓冲器时,发送过程开始。
在发送第一个数据位时,数据字被并行地( 通过内部总线) 传入移位寄存器,而后串行地移出到
MOSI脚上;MSB在先还是LSB 在先,取决于SPI_CR1寄存器中的LSBFIRST 位。数据从发送缓冲器传输到移位寄存器时TXE 标志将被置位,如果设置SPI_CR1寄存器中的TXEIE 位,将产生
中断。
回复 支持 反对

使用道具 举报

1

主题

22

回帖

0

蝴蝶豆

新手上路

最后登录
1970-1-1
 楼主| 发表于 2012-11-19 09:41:07 | 显示全部楼层

回复:STM32 SPI 问题

 #include "stm32f4_discovery.h"
#include "stdio.h"
#include "SPI3.h"


#define        TP_CS                GPIO_ResetBits(GPIOG, GPIO_Pin_4)
#define        TP_DCS        GPIO_SetBits(GPIOG, GPIO_Pin_4)


#define        SD_CS                GPIO_ResetBits(GPIOG, GPIO_Pin_5)
#define        SD_DCS        GPIO_SetBits(GPIOG, GPIO_Pin_5)


#define        FLASH_CS                GPIO_ResetBits(GPIOG, GPIO_Pin_3)
#define        FLASH_DCS                GPIO_SetBits(GPIOG, GPIO_Pin_3)


void SPI3_Config()
{
        GPIO_InitTypeDef GPIO_InitStructure;
        SPI_InitTypeDef  SPI_InitStructure;
       
        RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOG, ENABLE);
       
        //CS
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
        GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
  GPIO_Init(GPIOG, &GPIO_InitStructure);
       
        TP_DCS;
        SD_DCS;
        FLASH_DCS;
       
        //Enable peripheral clock
        RCC_APB1PeriphResetCmd(RCC_APB1Periph_SPI3, ENABLE);
        //Enable SCK, MOSI, MISO and NSS GPIO clocks
        RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC, ENABLE);
       
        GPIO_PinAFConfig(GPIOC,GPIO_PinSource10,GPIO_AF_SPI3);
        GPIO_PinAFConfig(GPIOC,GPIO_PinSource11,GPIO_AF_SPI3);
        GPIO_PinAFConfig(GPIOC,GPIO_PinSource12,GPIO_AF_SPI3);
       
        //Set as Output AF push-pull - SCK and MOSI PC10 PC12//SPI3_MISO PC11
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10 | GPIO_Pin_11 | GPIO_Pin_12;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
        GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
        GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_DOWN;
  GPIO_Init(GPIOC, &GPIO_InitStructure);
        //Peripherals alternate function
       
       
        //SPI3 设置
        SPI_I2S_DeInit(SPI3);
  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_Low;//空闲电平为低
  SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge;//第一个边沿(此时是上升沿)采样,第二个边沿锁存
  SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;
  SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_256;//由于说明书最高速率2M //72/256=
  SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;
  SPI_InitStructure.SPI_CRCPolynomial = 7;
  SPI_Init(SPI3, &SPI_InitStructure);
  /* Enable SPI3  */
  SPI_Cmd(SPI3, ENABLE);
}




       
       
//TSC2046
unsigned int X_Addata=0,Y_Addata=0;


static void XPT2046_EXIT_Config(void)//中断设置下降沿
{
        GPIO_InitTypeDef GPIO_InitStructure;
        EXTI_InitTypeDef EXTI_InitStructure;
        NVIC_InitTypeDef NVIC_InitStructure;
       
        /* Enable GPIOA clock */
        RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOG, ENABLE);
        /* Enable SYSCFG clock */
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);//极其重要,缺少不可!!!
        //Configure the I/O in input mode
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;
        GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
        GPIO_Init(GPIOG, &GPIO_InitStructure);       
       
        EXTI_ClearITPendingBit(EXTI_Line2);
        //Select the input source pin for the EXTI line
        SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOG,EXTI_PinSource2);


        /* Configure Button EXTI line */
        EXTI_InitStructure.EXTI_Line = EXTI_Line2;
        EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
        EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;  
        EXTI_InitStructure.EXTI_LineCmd = ENABLE;
        EXTI_Init(&EXTI_InitStructure);
       
//  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);


  /* Enable the EXTI2 Interrupt */
  NVIC_InitStructure.NVIC_IRQChannel = EXTI2_IRQn;
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  NVIC_Init(&NVIC_InitStructure);
}






void XPT2046_Config(void)
{
        SPI3_Config();
       
        XPT2046_EXIT_Config();               
}       
       
unsigned char XPT2046_SendByte(unsigned char byte)
{
  /* Loop while DR register in not emplty */
  while (SPI_I2S_GetFlagStatus(SPI3, SPI_I2S_FLAG_TXE) == RESET);


  /* Send Half Word through the SPI3 peripheral */
  SPI_I2S_SendData(SPI3, byte);


  /* Wait to receive a Half Word */
  while (SPI_I2S_GetFlagStatus(SPI3, SPI_I2S_FLAG_RXNE) == RESET);


  /* Return the Half Word read from the SPI bus */
  return (unsigned char)SPI_I2S_ReceiveData(SPI3);
}


unsigned char XPT2046_ReadByte(void)
{
  return (XPT2046_SendByte(0x00));
}


void XPT2046_Rd_Addata(void)
{
        unsigned int temp;
        TP_CS;


        XPT2046_SendByte(CHX);


        temp = 0;//相当于简短的延时啦
        temp = 0;
        temp = 0;
        temp = XPT2046_ReadByte();
        Y_Addata = temp= 3;
        Y_Addata &= 0x0FFF;
       
        printf("\nY_Addata = %d  ",Y_Addata);


        XPT2046_SendByte(CHY);
        temp = 0;
        temp = 0;
        temp = 0;
        temp = XPT2046_ReadByte();
        X_Addata = temp= 3;
        X_Addata &= 0x0FFF;
       
        printf("\nX_Addata = %d  \n",Y_Addata);
        TP_DCS;
}
       
       
//SD
       
       
       
       
//FLASH
       
第一次用STM32,大家帮忙看下,是不是我SPI没有配置好啊~谢谢~
回复 支持 反对

使用道具 举报

134

主题

4489

回帖

239

蝴蝶豆

版主

最后登录
2020-12-9
发表于 2012-11-19 16:29:41 | 显示全部楼层

RE:STM32 SPI 问题

请问一下,开启SPI3的时钟了吗?
回复 支持 反对

使用道具 举报

1

主题

22

回帖

0

蝴蝶豆

新手上路

最后登录
1970-1-1
 楼主| 发表于 2012-11-19 22:50:41 | 显示全部楼层

回复:STM32 SPI 问题 【悬赏问答】

回复第 4 楼 于2012-11-19 16:29:41发表:
请问一下,开启SPI3的时钟了吗?
 
 
开了
 
//Enable peripheral clock
RCC_APB1PeriphResetCmd(RCC_APB1Periph_SPI3, ENABLE);
 
 
是这句么?

 
回复 支持 反对

使用道具 举报

1

主题

22

回帖

0

蝴蝶豆

新手上路

最后登录
1970-1-1
 楼主| 发表于 2012-11-19 23:07:21 | 显示全部楼层

回复:STM32 SPI 问题 【悬赏问答】

回复第 5 楼 于2012-11-19 22:50:41发表:
回复第 4 楼 于2012-11-19 16:29:41发表:
请问一下,开启SPI3的时钟了吗?
 
 
开了
 
 
//Enable peripheral clock
RCC_APB1PeriphResetCmd(RCC_APB1Periph_SPI3, ENABLE);
 
 
是这句么?
 
 
 
 
多谢,应该是ClockCmd看来即使是官方库,也不能随便抄……
123.jpg
 
 

 
回复 支持 反对

使用道具 举报

8

主题

206

回帖

0

蝴蝶豆

中级会员

最后登录
2019-10-23
发表于 2012-11-20 10:12:30 | 显示全部楼层

RE:STM32 SPI 问题 【悬赏问答】

对啊 上面这句就是开SPI 时钟的啊 用任何外设前 记得打开时钟
回复 支持 反对

使用道具 举报

25

主题

446

回帖

0

蝴蝶豆

中级会员

最后登录
2019-12-10
发表于 2012-11-21 08:56:21 | 显示全部楼层

RE:STM32 SPI 问题 【悬赏问答】

情况咋样了,搞定了没
回复 支持 反对

使用道具 举报

0

主题

1

回帖

0

蝴蝶豆

新手上路

最后登录
1970-1-1
发表于 2013-4-28 09:46:37 | 显示全部楼层

RE:STM32 SPI 问题 【悬赏问答】

spi没工作,发送标志位一直没能复位,查看时钟等的配置是否对了
回复 支持 反对

使用道具 举报

1

主题

9

回帖

0

蝴蝶豆

中级会员

最后登录
2020-5-18
发表于 2013-8-6 09:24:44 | 显示全部楼层

回复:STM32 SPI 问题 【悬赏问答】

楼主你直接配置寄存器看看呢,我使用spi的时候也是,调用库函数不好用,直接写寄存器就好用了,不知道为什么!!!!
回复 支持 反对

使用道具 举报

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版