打印
[STM32F0]

stm32f030cct6的SPI问题

[复制链接]
1188|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
thxl_kis|  楼主 | 2019-7-31 11:45 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
目前有个项目用到stm32f030CCT6,原来都用stm32f030RCT6,在把SPI移过来时只是改了IO口,stm32f030CCT6用到的是PA4,PA5,PA6,PA7用来做SPI,但是一直调不通,总是死在了 while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_RXNE) == RESET)这里面,看了网上的贴子,换成while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_BSY) == SET);判断忙信号也不行。虽然不死在里面,但读出来的数据全是0,不知道有哪位大师有用遇到过此类问题,这款芯片还是第一次用,我的初始化如下.此初始化代码在030RCT6是可以的,已经量产。唯一的区别就是改了下IO口#define PIN_SPI1_CSN    GPIO_Pin_4
#define PIN_SPI1_SCK    GPIO_Pin_5
#define PIN_SPI1_MISO   GPIO_Pin_6
#define PIN_SPI1_MOSI   GPIO_Pin_7

/* Select SPI FLASH: Chip Select pin low  */
#define SPI_FLASH_CS_LOW()       GPIO_ResetBits(GPIOA, PIN_SPI1_CSN)
/* Deselect SPI FLASH: Chip Select pin high */
#define SPI_FLASH_CS_HIGH()      GPIO_SetBits(GPIOA, PIN_SPI1_CSN)


void spi_flash_init(void)
{
                GPIO_InitTypeDef GPIO_InitStructure;
                SPI_InitTypeDef   SPI_InitStructure;
               
                RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);
                RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE);
               
                GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;    //复用功能
                GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;    //推挽输出
                GPIO_InitStructure.GPIO_PuPd  = GPIO_PuPd_DOWN;    //下拉
                GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;    //中速
                GPIO_InitStructure.GPIO_Pin = PIN_SPI1_SCK | PIN_SPI1_MOSI | PIN_SPI1_MISO;
                GPIO_Init(GPIOA, &GPIO_InitStructure);

                GPIO_PinAFConfig(GPIOA, GPIO_PinSource5, GPIO_AF_0);
                GPIO_PinAFConfig(GPIOA, GPIO_PinSource6, GPIO_AF_0);
                GPIO_PinAFConfig(GPIOA, GPIO_PinSource7, GPIO_AF_0);

                GPIO_InitStructure.GPIO_Pin = PIN_SPI1_CSN;    //配置 CSN
                GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;    //高速
                GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;    //输出模式
                GPIO_Init(GPIOA, &GPIO_InitStructure);
                //GPIO_PinAFConfig(GPIOA, GPIO_PinSource15, GPIO_AF_0);

                SPI_I2S_DeInit(SPI1);    //将寄存器重设为缺省值
                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_Low;    //通信空闲时 SCK 为低电平
                SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge;    //第一个时钟沿捕获
                SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;    //软件控制 NSS
                SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_8;    //SPI 速度 8 分频
                SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;    //数据传输从 MSB 开始
                SPI_InitStructure.SPI_CRCPolynomial = 7;    //CRC 校验
                SPI_Init(SPI1, &SPI_InitStructure);
                SPI_RxFIFOThresholdConfig(SPI1, SPI_RxFIFOThreshold_QF);//重要,把应答数据位设置为 8 位
                SPI_Cmd(SPI1, ENABLE);
}

使用特权

评论回复
沙发
thxl_kis|  楼主 | 2019-7-31 14:32 | 只看该作者
没人回贴,都没遇到过吗?自己顶

使用特权

评论回复
板凳
feelhyq| | 2019-8-1 10:14 | 只看该作者
用示波器看看 clk, miso,mosi管脚上的波形

使用特权

评论回复
地板
thxl_kis|  楼主 | 2019-8-2 10:54 | 只看该作者
feelhyq 发表于 2019-8-1 10:14
用示波器看看 clk, miso,mosi管脚上的波形

上面看不到波形

使用特权

评论回复
5
huliu0521| | 2019-8-11 21:13 | 只看该作者
还是没解决吗?我也是遇到同样的问题啊

使用特权

评论回复
6
ningling_21| | 2019-8-12 09:23 | 只看该作者
huliu0521 发表于 2019-8-11 21:13
还是没解决吗?我也是遇到同样的问题啊

SPI配置没问题?

使用特权

评论回复
7
paotangsan| | 2019-8-15 11:10 | 只看该作者
初始化能通过?

使用特权

评论回复
8
renzheshengui| | 2019-8-15 11:31 | 只看该作者
看不到波形 那就是配置问题啊

使用特权

评论回复
9
wakayi| | 2019-8-15 11:35 | 只看该作者
应该就是配置问题

使用特权

评论回复
10
xiaoqizi| | 2019-8-15 11:40 | 只看该作者
用cube生成一个对照看看

使用特权

评论回复
11
木木guainv| | 2019-8-15 12:00 | 只看该作者
好奇怪的问题啊

使用特权

评论回复
12
ruanpeng| | 2020-4-26 11:37 | 只看该作者
我遇到过类似的问题,将PA4、PA5设置为串口,在对其关断的情况下,回影响PA6作为输入信号的读取,有点莫名奇妙。

使用特权

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

本版积分规则

3

主题

12

帖子

0

粉丝