自己画了个板子。自己以为明白了。于是把触摸屏,Flash的SPI接口共用了SPI1。Flash是高速的可以直接36M不分频。触摸控制芯片是AD7843SPI速度快了会出错,于是我想在用触摸的时候把SPI速度换为64分频。用Flash时候换为不分频。而且之前也查过,只要在设置SPI之前关闭了SPI就可以再次设置。于是就这么做了......但是板子做回来才知道不行,我每次如果只改SPI中的分频,再使能SPI并不能达到效果。一定要再重新完全初始化一次。这样太费时间了,有哪位大神遇到过了。(直接操作寄存器,或者用库函数都不行)
单独使用其中一个都是可以的。就是不能这样更改速度。求教了
下面贴下问题代码。
u8 SPI1_Mode = 0;
不分频
void SPI1_TurnToFlash(void)
{
if(SPI1_Mode != SPI1_Flash)
{
// SPI_Cmd(SPI1, DISABLE);//关闭
// RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, DISABLE);
// SPI_InitStructure.SPI_CPOL = SPI_CPOL_High;
// SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge;
// SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_4;
// SPI_Init(SPI1, &SPI_InitStructure);
// RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE);
// SPI_Cmd(SPI1, ENABLE);//启动SPI1
SPI1->CR1 &= ~(1<<6);//关闭SPI
SPI1->CR1 &= ~(1<<3);
SPI1->CR1 &= ~(1<<5);//分频改变
SPI1->CR1 |= (1<<6);//启动SPI
SPI1_Mode = SPI1_Flash;
}
}
64分频
void SPI1_TurnToTouch(void)
{
if(SPI1_Mode != SPI1_Touch)
{
// SPI_Cmd(SPI1, DISABLE);//关闭
// RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, DISABLE);
// SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low;
// SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge;
// SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_64;
// SPI_Init(SPI1, &SPI_InitStructure);
// RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE);
// SPI_Cmd(SPI1, ENABLE);//启动SPI1
SPI1->CR1 |= (1<<3);
SPI1->CR1 |= (1<<5);
SPI1->CR1 |= (1<<6);
SPI1_Mode = SPI1_Touch;
}
}
|