(已解决)STM8L151的SPI1调不通啊
本帖最后由 技术范儿 于 2016-12-21 15:51 编辑RT,最近用STM8L151K4的SPI1外挂无线模块,感觉SPI不听使唤呢,下面是我的代码和抓到的波形图,请大家指点一下。#define SPI_PIN_SCK_PORT GPIOB
#define SPI_PIN_SCK GPIO_Pin_5
#define SPI_PIN_MOSI_PORT GPIOB
#define SPI_PIN_MOSI GPIO_Pin_6
#define SPI_PIN_MISO_PORT GPIOB
#define SPI_PIN_MISO GPIO_Pin_7
#if 1
void SpiInit( void )
{
/* Enable SPI clock */
GPIO_Init(SPI_PIN_SCK_PORT, SPI_PIN_SCK , GPIO_Mode_Out_PP_Low_Fast);
GPIO_Init(SPI_PIN_MOSI_PORT , SPI_PIN_MOSI , GPIO_Mode_Out_PP_Low_Fast);
GPIO_Init(SPI_PIN_MISO_PORT , SPI_PIN_MISO , GPIO_Mode_In_PU_No_IT);
SPI_DeInit(SPI1);
CLK_PeripheralClockConfig(CLK_Peripheral_SPI1, ENABLE);
//SPI_DeInit(SPI1);
//GPIO_Init(GPIOB, GPIO_Pin_5, GPIO_Mode_Out_PP_High_Fast);
//GPIO_Init(GPIOB, GPIO_Pin_6, GPIO_Mode_Out_PP_High_Fast);
//主机模式,配置为输入 该设置很关键
//GPIO_Init(GPIOB, GPIO_Pin_7, GPIO_Mode_In_PU_No_IT);
/* Initialize SPI */
SPI_Init(
SPI1,
SPI_FirstBit_MSB,
SPI_BaudRatePrescaler_16,
SPI_Mode_Master,
SPI_CPOL_Low,
SPI_CPHA_1Edge,
SPI_Direction_2Lines_FullDuplex,
SPI_NSS_Soft,
0x07
);
SPI_Cmd(SPI1,ENABLE);
}
uint8_t SpiInOut( uint8_t outData )
{
/* Loop while DR register in not emplty */
while (SPI_GetFlagStatus(SPI1, SPI_FLAG_TXE) == RESET);
/* Send byte through the SPI1 peripheral */
SPI_SendData(SPI1, outData);
/* Wait to receive a byte */
while (SPI_GetFlagStatus(SPI1, SPI_FLAG_RXNE) == RESET);
/* Return the byte read from the SPI bus */
return SPI_ReceiveData(SPI1);
}
void SX1276WriteBuffer( uint8_t addr, uint8_t *buffer, uint8_t size )
{
uint8_t i;
GPIO_WriteBit( NSS_IOPORT, NSS_PIN, RESET );
//temp = SpiInOut( addr | 0x80 );
SpiInOut( addr);
//SpiInOut(0);
for( i = 0; i < size; i++ )
{
SpiInOut(buffer);
//SpiInOut(0);
}
GPIO_WriteBit( NSS_IOPORT, NSS_PIN, SET );
//SPI_Cmd(SPI1,DISABLE);
}
最后调用SX1276Write(0xff,0x02);发现裸机分析仪抓到的和写入的值不一致,而且相差很多。用的是内部16M时钟
帮顶 GPIO_Init(SPI_PIN_SCK_PORT, SPI_PIN_SCK , GPIO_Mode_Out_PP_Low_Fast);
GPIO_Init(SPI_PIN_MOSI_PORT , SPI_PIN_MOSI , GPIO_Mode_Out_PP_Low_Fast);
GPIO_Init(SPI_PIN_MISO_PORT , SPI_PIN_MISO , GPIO_Mode_In_PU_No_IT);
去掉这几行,不需要 SX1276Write函数声明在哪?
偶们只看到了
SX1276WriteBuffer
谢谢各位支持。跟硬件没关系,堆栈溢出到RAM区域,导致函数传参数的时候传错了 朋友能发一份硬件SPI的例程给我吗 luoyi654@163.com 技术范儿 发表于 2016-12-21 15:50
谢谢各位支持。跟硬件没关系,堆栈溢出到RAM区域,导致函数传参数的时候传错了 ...
SPI使能之后,读写数据就有SCK时钟了? 请教一下,读数据怎么做呢?发完读指令直接读吗? 楼主,能否请教一下关于这方面的问题,可以发一份这个历程吗,微信dddcmr,邮箱2454600872@qq.com,我做那个是stml151u6与a7139,请教下,十分感谢
页:
[1]