高级会员
- 积分
- 895
- 金钱
- 895
- 注册时间
- 2012-6-29
- 在线时间
- 37 小时
|
1金钱
本帖最后由 catbal 于 2016-10-26 17:05 编辑
spi屏幕驱动在stm32上无论是通过硬件spi还是软件模拟都是可以点亮屏幕, 但是我移植到stm8s上后,只有模拟的点亮 硬件spi没有点亮,帮忙看看什么原因, 谢谢
stm8设为推挽输出的波形是方波 下面那个是stm32 sck 跟mosi的波形
STM8 SPI设置
void SPI1_Init(void)
{
GPIO_DeInit(GPIOC);
GPIO_Init(GPIOC, GPIO_PIN_1, GPIO_MODE_OUT_PP_HIGH_FAST);
GPIO_Init(GPIOC, GPIO_PIN_2, GPIO_MODE_OUT_PP_HIGH_FAST);
GPIO_Init(GPIOC, GPIO_PIN_3, GPIO_MODE_OUT_PP_HIGH_FAST);
GPIO_Init(GPIOC, GPIO_PIN_4, GPIO_MODE_OUT_PP_HIGH_FAST);
//GPIO_Init(GPIOC, GPIO_PIN_6, GPIO_MODE_OUT_PP_HIGH_FAST);
SPI->CR1 = (0<<7)|(0<<6)|(0<<3)|(1<<2)|(1<<1)|(1<<0); /* 先发送MSB 先禁止SPI 波特率设为 fbus/2 设置为主模式 空闲状态时SCK为高电平 数据从第二个时钟边沿开始采样 */
SPI->CR2 = (0<<7)|(0<<5)|(0<<4)|(0<<2)|(1<<1)|(1<<0); /* 设为全双工模式 使能软件从设备管理 内部从设备选择为主模式 */
SPI->ICR = (0<<7)|(0<<6)|(0<<5)|(0<<4); /* 禁止所有中断 */
SPI->CR1 |= (1<<6); /* 开启SPI模块 */
// SPI_Init(SPI_FIRSTBIT_MSB, SPI_BAUDRATEPRESCALER_2, SPI_MODE_MASTER, SPI_CLOCKPOLARITY_HIGH, SPI_CLOCKPHASE_2EDGE, SPI_DATADIRECTION_2LINES_FULLDUPLEX, SPI_NSS_HARD, 0x07);
// SPI_Cmd(ENABLE);
}
//发送一个数据
u8 SPI_WriteByte(u8 Byte)
{
while(!(SPI->SR & 0x02)); /* 等待发送寄存器为空 */
SPI->DR = Byte; /* 将发送的数据写到数据寄存器 */
while(!(SPI->SR & 0x01)); /* 等待接受寄存器满 */
return SPI->DR; /* 读数据寄存器 */
}
stm32 spi设置
void SPI2_Init(void)
{
SPI_InitTypeDef SPI_InitStructure;
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO|RCC_APB2Periph_GPIOB, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13 | GPIO_Pin_15;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_Init(GPIOB, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_14;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9|GPIO_Pin_10| GPIO_Pin_11| GPIO_Pin_12;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOB, &GPIO_InitStructure);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2 ,ENABLE);
SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
SPI_InitStructure.SPI_Mode = SPI_Mode_Master;
SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;
SPI_InitStructure.SPI_CPOL = SPI_CPOL_High;
SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge;
SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;
SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_2;
SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;
SPI_InitStructure.SPI_CRCPolynomial = 7;
SPI_Init(SPI2, &SPI_InitStructure);
SPI_Cmd(SPI2, ENABLE);
}
//发送一个数据
u8 SPI_WriteByte(SPI_TypeDef* SPIx,u8 Byte)
{
while((SPIx->SR&SPI_I2S_FLAG_TXE)==RESET); //µÈ´ý·¢ËÍÇø¿Õ
SPIx->DR=Byte; //·¢ËÍÒ»¸öbyte
while((SPIx->SR&SPI_I2S_FLAG_RXNE)==RESET);//µÈ´ý½ÓÊÕÍêÒ»¸öbyte
return SPIx->DR; //·µ»ØÊÕµ½µÄÊý¾Ý
}
|
-
stm32 的波形 SCK 跟mosi
|