有没有串口2的SPI模式使用方法或者教程?
模仿数据手册里的例程进行了如下配置,无论是输出还是输入,MOSI、MISO和SCLK都没有信号是不是漏配置了什么?
void usart2_spi_init()
{
P4_MODE_IO_PU(GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_3);
P5_MODE_IO_PU(GPIO_Pin_4);
// 00 S2SS P1.2/P5.4 S2MOSI P1.3S2ISO P1.4 S2SCLK P1.5
// 01 S2SS P2.2 S2MOSI P2.3S2ISO P2.4 S2SCLK P2.5
// 10 S2SS P5.4 S2MOSI P4.0S2ISO P4.1 S2SCLK P4.3 (启用)
// 11 S2SS P7.4 S2MOSI P7.5S2ISO P7.6 S2SCLK P7.7
S2SPI_S0 = 0; //低位
S2SPI_S1 = 1; //高位
S2CON = 0x10;//使能串口2接收,且调整串口模式为模式0(必须)
USART2CR1 = 0x10; //使能SPI模式
// USART2CR1 |= 0x40; //1: LSB0: MSB
USART2CR1 &= ~0x40; //1: LSB0: MSB
// USART2CR1 |= 0x04; //固定为从机
USART2CR1 &= ~0x04;//固定为主机
// USART2CR1 |= 0x00; //CPOL = 0 CPHA = 0
// USART2CR1 |= 0x01; //CPOL = 0 CPHA = 1
// USART2CR1 |= 0x02; //CPOL = 1 CPHA = 0
USART2CR1 |= 0x03; //CPOL = 1 CPHA = 1
USART2CR4 = 0x00;//SPI速度为SYSCLOCK/4
// USART2CR4 = 0x01;//SPI速度为SYSCLOCK/8
// USART2CR4 = 0x02;//SPI速度为SYSCLOCK/16
// USART2CR4 = 0x03;//SPI速度为SYSCLOCK/2
USART2CR1 |= 0x08;//使能SPI2
ES2 = 1;//串口2中断允许位
}
void spi2_isr() interrupt UART2_VECTOR
{
if(S2TI)
{
S2TI = 0;
spi2_flag.spi2_Tbusy = 0;
}
if(S2RI)
{
S2RI = 0;
S2BUF = spi2_Rbuffer;
spi2_flag.spi2_Rbusy = 0;
}
}
void spi2_write_byte(u8 dat)
{
SPI_CS_0;
S2BUF = dat;
spi2_flag.spi2_Tbusy = 1;
while(spi2_flag.spi2_Tbusy);
SPI_CS_1;
}
void spi2_read_byte()
{
spi2_flag.spi2_Rbusy = 1;
S2BUF = 0xFF;
while(spi2_flag.spi2_Rbusy);
}
看下官网的视频教程,视频里有讲解哦~ 可以参考STC32G实验箱例程包:78-USART1复用SPI与USART2复用SPI相互通信例程
论坛下载地址:
https://www.stcaimcu.com/plugin.php?id=mdown:index#/~cateid=5&key=
页:
[1]