[STM32F1]

stm32 SPI发送数据问题

[复制链接]
1913|21
手机看帖
扫描二维码
随时随地手机跟帖
xch4911|  楼主 | 2014-10-22 15:18 | 显示全部楼层 |阅读模式
刚学STM32 想用SPI 循环发送数据 但是用示波器看管脚 都没有电平变化 大家帮忙看看 是什么问题
xch4911|  楼主 | 2014-10-22 15:19 | 显示全部楼层
本帖最后由 xch4911 于 2014-10-22 19:49 编辑

#include "stm32f10x.h"

void RCC_init(void)
{
        
        ErrorStatus HSEStartUpStatus;
        RCC_DeInit();                                                                                                            
        RCC_HSEConfig(RCC_HSE_ON);                                                                  
        HSEStartUpStatus = RCC_WaitForHSEStartUp();
        if(HSEStartUpStatus == SUCCESS)                                                      
        {
                RCC_HCLKConfig(RCC_SYSCLK_Div1);                                      
                RCC_PCLK2Config(RCC_HCLK_Div1);                                      
                RCC_PCLK1Config(RCC_HCLK_Div2);                                    
               
                RCC_ADCCLKConfig(RCC_PCLK2_Div6);     
               
                FLASH_SetLatency(FLASH_Latency_2);                             
                FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);
                RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);
                RCC_PLLCmd(ENABLE);                                                                                                                                    
                while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET);
                RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);        
                while (RCC_GetSYSCLKSource() != 0x08);                 
        }

        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1,ENABLE);
        //RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);//这句完全不需要
}

void SPI1_Configuration (void)
{
                GPIO_InitTypeDef GPIO_InitStructure;
                SPI_InitTypeDef SPI_InitStructure;
               
        /*************配置GPIO************/        
                GPIO_InitStructure.GPIO_Pin  = GPIO_Pin_5|GPIO_Pin_7;
                GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
                GPIO_InitStructure.GPIO_Speed= GPIO_Speed_50MHz;
                GPIO_Init(GPIOA, &GPIO_InitStructure);

        /*************配置SPI**************/

                SPI_Cmd(SPI1, DISABLE);

                SPI_InitStructure.SPI_Direction = SPI_Direction_1Line_Tx;
                SPI_InitStructure.SPI_Mode      = SPI_Mode_Master;
                SPI_InitStructure.SPI_DataSize  = SPI_DataSize_8b;
                SPI_InitStructure.SPI_CPHA      = SPI_CPOL_Low;
                SPI_InitStructure.SPI_CPOL      = SPI_CPHA_2Edge;
                SPI_InitStructure.SPI_NSS       = SPI_NSS_Soft;
                SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_4;//18MHz
                SPI_InitStructure.SPI_FirstBit  = SPI_FirstBit_MSB;
                SPI_InitStructure.SPI_CRCPolynomial = 7;
                SPI_Init(SPI1,&SPI_InitStructure);
                SPI_SSOutputCmd(SPI1, ENABLE);
               
                SPI_I2S_ClearFlag(SPI1, SPI_I2S_FLAG_TXE);
                SPI_I2S_ClearFlag(SPI1, SPI_I2S_FLAG_RXNE);               
                SPI_Cmd(SPI1, ENABLE);
}

int main()
{
        
        RCC_init();
        SPI1_Configuration();
        while(1)
        {
                                SPI_I2S_SendData(SPI1,0xff);
        }
}

使用特权

评论回复
xch4911|  楼主 | 2014-10-22 15:22 | 显示全部楼层
:'(帮帮忙吧

使用特权

评论回复
xch4911|  楼主 | 2014-10-22 15:22 | 显示全部楼层
实在搞不懂了 鼓起勇气发帖求助

使用特权

评论回复
xch4911|  楼主 | 2014-10-22 16:18 | 显示全部楼层
路过的帮帮忙吧

使用特权

评论回复
牛牛牛| | 2014-10-22 17:24 | 显示全部楼层
具体哪个芯片,怎么就配置了两个引脚

使用特权

评论回复
szjlj168| | 2014-10-22 17:40 | 显示全部楼层
有需要芯片的可以QQ :547838378

使用特权

评论回复
mmuuss586| | 2014-10-22 19:03 | 显示全部楼层
你示波器看的哪个脚啊?
还有片选呢?
好几个脚没设置呢;

使用特权

评论回复
mmuuss586| | 2014-10-22 19:04 | 显示全部楼层
我的程序,你可以参考:
//SPI1初始化,Spi1在Pa4~Pa7
void SPI1_Init(void)       
{
        /* Private variables ---------------------------------------------------------*/
        GPIO_InitTypeDef GPIO_InitStructure;
        SPI_InitTypeDef SPI_InitStructure;
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1|RCC_APB2Periph_GPIOA, ENABLE);
//----Pa6-SPI2_MISO-对应GPIO口初始化--------------------------------------------------
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
  GPIO_Init(GPIOA, &GPIO_InitStructure);
//----Pa5-SPI2_SCK&Pa7-SPI2_MOSI-对应GPIO口初始化--------------------------------------
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5|GPIO_Pin_7;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  GPIO_Init(GPIOA, &GPIO_InitStructure);
//----Pa4-SPI2_NSS-对应GPIO口初始化----------------------------------------------------
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  GPIO_Init(GPIOA, &GPIO_InitStructure);
//----------------------------------------------------------------------------------
        SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;//全双工;
        SPI_InitStructure.SPI_Mode = SPI_Mode_Master;//主机模式;
        SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;//8位数据模式;
        SPI_InitStructure.SPI_CPOL = SPI_CPOL_High;//空闲模式下SCK为1;
        SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge;//数据采样从第2个时间边沿开始;
        SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;//NSS软件管理;
        SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_32;//波特率,4M时钟MFRC522不行,要2M以下,
        SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;//大端模式;
        SPI_InitStructure.SPI_CRCPolynomial = 7;//CRC多项式;        
        SPI_Init(SPI1,&SPI_InitStructure);
//        SPI_Cmd(SPI1, DISABLE);                                         //现在不开SPI,
        SPI_Cmd(SPI1,ENABLE);                                         //现在开SPI,
}

使用特权

评论回复
评分
参与人数 1威望 +1 收起 理由
xch4911 + 1 赞一个!
xjjspace| | 2014-10-22 19:35 | 显示全部楼层
如果配置没错的话,就是你示波器没连对。

使用特权

评论回复
xch4911|  楼主 | 2014-10-22 19:42 | 显示全部楼层
牛牛牛 发表于 2014-10-22 17:24
具体哪个芯片,怎么就配置了两个引脚

目前只是想看看发出的波形,所以就配置了两个引脚

使用特权

评论回复
xch4911|  楼主 | 2014-10-22 19:43 | 显示全部楼层
xjjspace 发表于 2014-10-22 19:35
如果配置没错的话,就是你示波器没连对。

--! 感觉SPI1不太好使,换成SPI2就好使了

使用特权

评论回复
xch4911|  楼主 | 2014-10-22 19:44 | 显示全部楼层
mmuuss586 发表于 2014-10-22 19:04
我的程序,你可以参考:
//SPI1初始化,Spi1在Pa4~Pa7
void SPI1_Init(void)       

谢谢 借鉴一下

使用特权

评论回复
xjjspace| | 2014-10-22 19:46 | 显示全部楼层
xch4911 发表于 2014-10-22 19:43
--! 感觉SPI1不太好使,换成SPI2就好使了

SPI1不太好使这种话可不能乱讲,很多工程师朋友都是用过并且没问题的。
你单纯想看波形的话,可以用你配好的SPI2看,不过最好是回头查一下哪里配置错了导致SPI1没用对。

使用特权

评论回复
xch4911|  楼主 | 2014-10-22 19:47 | 显示全部楼层
xch4911 发表于 2014-10-22 19:43
--! 感觉SPI1不太好使,换成SPI2就好使了

被你说对了:L

使用特权

评论回复
xch4911|  楼主 | 2014-10-22 19:48 | 显示全部楼层
太傻了 插错孔了

使用特权

评论回复
xch4911|  楼主 | 2014-10-22 19:50 | 显示全部楼层
谢谢大家帮忙了

使用特权

评论回复
xch4911|  楼主 | 2014-10-22 19:54 | 显示全部楼层
xjjspace 发表于 2014-10-22 19:46
SPI1不太好使这种话可不能乱讲,很多工程师朋友都是用过并且没问题的。
你单纯想看波形的话,可以用你配 ...

嗯,结果证明 还是自己错了,开发板给的图没仔细看,结果插错孔了

使用特权

评论回复
mmuuss586| | 2014-10-23 08:22 | 显示全部楼层
xch4911 发表于 2014-10-22 19:44
谢谢 借鉴一下

不客气;

使用特权

评论回复
mmuuss586| | 2014-10-23 08:22 | 显示全部楼层
xjjspace 发表于 2014-10-22 19:46
SPI1不太好使这种话可不能乱讲,很多工程师朋友都是用过并且没问题的。
你单纯想看波形的话,可以用你配 ...

SPI还还好吧,ST的IIC不好使是出名的;

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

19

帖子

0

粉丝