问题描述
我使用的是 Waveshare 1.54" 电子纸模块。使用 SPI 外设:
- cpu 频率为 16Mhz
- 8 的 SPI 预分频器 DIV
- MSB 优先
- CPOL=0,CPHA=1
显示器没有响应,但它以 TI CC1310 正确响应。 SPI 的问题是传输字节后没有进入理想的高电平状态。
SPI 初始化如下:
/****************** Initializing The SPI Peripheral ******************/
void SPI_setup(void)
{
CLK_PeripheralClockConfig(CLK_PERIPHERAL_SPI,ENABLE); //Enable SPI Peripheral Clock
//Set the MOSI,MISO and SCk at high Level.
//GPIO_ExternalPullUpConfig(GPIOC,(GPIO_Pin_TypeDef)(GPIO_PIN_6),ENABLE);
SPI_DeInit();
SPI_Init(SPI_FirsTBIT_MSB,//Send MSB First
SPI_BAUdratEPRESCALER_8,//Fosc/16 = 1MHz
SPI_MODE_MASTER,SPI_CLOCKPOLARITY_LOW,//IDEAL Clock Polarity is LOW
SPI_CLOCKPHASE_2EDGE,//The first clock transition is the first data capture edge
SPI_DATADIRECTION_2LInes_FULLDUPLEX,//Only TX is Enable
SPI_NSS_SOFT,0x00);
SPI_Cmd(ENABLE);
}
解决方法
这与您在 Issue in interfacing SPI e-ink display with PIC 18F46K22 上遇到的问题几乎相同,只是在不同的处理器上。值得注意的是,STM8 上的 CPHA 与 PIC18 上的 CPE 具有相反的意义,这可能是您出错的原因。也就是说STM8上的CPHA=1
和PIC18上的CKE=0
效果是一样的。你真的必须仔细查看每个部分的时序图。
来自https://www.waveshare.com/wiki/1.54inch_e-Paper_Module:
显然您需要以下之一:
-
CPHA=1
/CPOL=1
(SPI_CLOCKPOLARITY_HIGH
/SPI_CLOCKPHASE_2EDGE
) 或 -
CPHA=0
/CPOL=0
(SPI_CLOCKPOLARITY_LOW
/SPI_CLOCKPHASE_1EDGE
)
如果您想将 SCLK 设为常高,那么您需要第一个选项 - 尽管我不明白为什么这是“理想的”,但 Waveshare 图清楚地表明两者都可以接受。