- 打卡等级:初来乍到
- 打卡总天数:5
- 最近打卡:2026-03-08 20:43:15
已绑定手机
新手上路
- 积分
- 44
|
#include "SPI.h"
void SPI1_FuncInit(void)
{
//1.打开总开关EAXDFR
P_SW2|=0x80;
//2.配置IO口模式,P3.5-P3.2推挽输出 0:0011 1100;1:1100 0011
P3M1=0xCB;
P3M0=0x34;
//3.配置SPI1相关寄存器1101 0000
SPCTL=0xD3;
//4.启动SPI1的P3.3和P3.4 0000 1100
P_SW1=0x0C;
//5.清除状态
SPSTAT=0xC0;
}
unsigned char SPI1_SwapByte(unsigned char dat)
{
SPDAT=dat; //将测试数据写入寄存器除法硬件自动发送
while (!(SPSTAT&0x80)); //查询标志位
SPSTAT=0x80; //硬件不会自动清零,必须软件向SPIF写0
return SPDAT; //返回接收到的数据
}
以上时我SPI的初始化代码
void CLK_Init(void)
{
#if Main_Fosc == Fosc_120Mhz
WTST = 4;CLKDIV = 2; //设置系统时钟=480MHz/2/2=120MHz,(因为CLKSEL选择时,已经将HPLL/2了)
#elif Main_Fosc == Fosc_80Mhz
WTST = 3;CLKDIV = 3; //设置系统时钟=480MHz/2/3=80MHz
#elif Main_Fosc == Fosc_60Mhz
WTST = 2;CLKDIV = 4; //设置系统时钟=480MHz/2/4=60MHz
#endif
//以下为超过60MHz时,系统时钟使用HPLL方式提供
VRTRIM = CHIPID22; //载入27MHz频段的VRTRIM值
IRTRIM = CHIPID12; //指定当前HIRC为24MHz,此时会覆盖掉ISP设置的时钟频率
IRCBAND &= ~0x03; //清空频段选择
IRCBAND |= 0x01; //选择27Mhz频段
HPLLCR &= ~0x10; //选择HPLL输入时钟源为HIRC
HPLLPDIV = 4; //24MHz/4=6MHz,需要保证输入HPLL的时钟在6MHz附近
HPLLCR |= 0x0e; //HPLL=6MHz*80=480MHz
HPLLCR |= 0x80; //使能HPLL
Delay10ms();
CLKSEL &= ~0x03; //BASE_CLK选择为HIRC,用以提供给HPLL
CLKSEL &= ~0x0c; //清空主时钟源选择
CLKSEL |= 1<<2; //设置主时钟源为内部 HPLL1 输出/2
}
这是我的时钟初始化代码
尝试完成单片机的自发与自收却发现SPI卡住读不到数据,想请教一下哪里出了问题
|
|