[STM32F0] stm32f030cct6的SPI问题

[复制链接]
 楼主| supernan 发表于 2022-5-6 22:02 | 显示全部楼层 |阅读模式
目前有个项目用到stm32f030CCT6,原来都用stm32f030RCT6,在把SPI移过来时只是改了IO口,stm32f030CCT6用到的是PA4,PA5,PA6,PA7用来做SPI,但是一直调不通,总是死在了 while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_RXNE) == RESET)这里面
pengf 发表于 2022-5-6 22:04 | 显示全部楼层
换成while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_BSY) == SET)
 楼主| supernan 发表于 2022-5-6 22:06 | 显示全部楼层
判断忙信号也不行
 楼主| supernan 发表于 2022-5-6 22:08 | 显示全部楼层
虽然不死在里面,但读出来的数据全是0
juventus9554 发表于 2022-5-6 22:10 | 显示全部楼层
初始化代码?
 楼主| supernan 发表于 2022-5-6 22:13 | 显示全部楼层
在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);
}
zhanghqi 发表于 2022-5-6 22:15 | 显示全部楼层
用示波器看看 clk, miso,mosi管脚上的波形
 楼主| supernan 发表于 2022-5-6 22:18 | 显示全部楼层
上面看不到波形
weifeng90 发表于 2022-5-6 22:18 来自手机 | 显示全部楼层
先看下IO波形对不对
xxrs 发表于 2022-5-6 22:22 | 显示全部楼层
还是没解决吗?我也是遇到同样的问题啊
renyaq 发表于 2022-5-6 22:25 | 显示全部楼层
SPI配置没问题?
dengdc 发表于 2022-5-6 22:26 | 显示全部楼层
初始化能通过?
zwll 发表于 2022-5-6 22:32 | 显示全部楼层
看不到波形 那就是配置问题啊
pengf 发表于 2022-5-6 22:35 | 显示全部楼层
应该就是配置问题
huangchui 发表于 2022-5-6 22:36 | 显示全部楼层
用cube生成一个对照看看
jlyuan 发表于 2022-5-6 22:38 | 显示全部楼层
好奇怪的问题啊
yszong 发表于 2022-5-6 22:40 | 显示全部楼层
我遇到过类似的问题,将PA4、PA5设置为串口,在对其关断的情况下,回影响PA6作为输入信号的读取,有点莫名奇妙。
 楼主| supernan 发表于 2022-5-6 22:43 | 显示全部楼层

嗯,我再好好缕一缕吧,有了好消息及时通知大家
您需要登录后才可以回帖 登录 | 注册

本版积分规则

730

主题

10412

帖子

6

粉丝
快速回复 在线客服 返回列表 返回顶部