- 打卡等级:初来乍到
- 打卡总天数:1
- 最近打卡:2025-06-22 16:27:07
已绑定手机
新手上路
- 积分
- 16
|
您好帖主,请问我这样设计不对吗,为啥对单片机的时钟引脚进行检测发现无输出
//========================================================================
// 函数: void SPI_Init(SPI_InitTypeDef *SPIx)
// 描述: SPI初始化程序.
// 参数: SPIx: 结构参数,请参考spi.h里的定义.
// 返回: none.
// 版本: V1.0, 2012-11-22
//========================================================================
void SPI_Init(void)
{
// if(SPIx->SPI_SSIG == ENABLE) SPCTL |= (1<<7); //conform Master or Slave by SPI_Mode(ignore SS)
// else SPCTL &= ~(1<<7); //conform Master or Slave by SS pin.
// SPI_Start(SPIx->SPI_Enable);
// SPI_FirstBit_Set(SPIx->SPI_FirstBit);
// SPI_Mode_Set(SPIx->SPI_Mode);
// SPI_CPOL_Set(SPIx->SPI_CPOL);
// SPI_CPHA_Set(SPIx->SPI_CPHA);
// SPI_Clock_Select(SPIx->SPI_Speed);
SPI_SSIG_Set(ENABLE); //conform Master or Slave by SPI_Mode(ignore SS)
SPI_Start(ENABLE);
SPI_FirstBit_Set(SPI_MSB);
SPI_Mode_Set(SPI_Mode_Master);
SPI_CPOL_Set(SPI_CPOL_Low);
SPI_CPHA_Set(SPI_CPHA_2Edge);
SPI_Clock_Select( SPI_Speed_4);
SPI_RxTimerOut = 0;
B_SPI_Busy = 0;
}
//========================================================================
// 函数: void SPI_WriteByte(u8 dat)
// 描述: SPI发送一个字节数据.
// 参数: dat: 要发送的数据.
// 返回: none.
// 版本: V1.0, 2020-09-14
//========================================================================
void SPI_WriteByte(u8 dat) //SPI发送一个字节数据
{
SPDAT = dat;
while (!(SPSTAT & SPIF)); // 等待传输完成
SPSTAT = 0x80; // 清除传输完成标志
}
//========================================================================
// 函数: void SPI_WriteWord(unsigned int cmd)
// 描述: SPI发送两个字节数据.
// 参数: dat: 要发送的数据.
// 返回: none.
// 版本: V1.0, 2020-09-14
//========================================================================
void SPI_WritewWord(unsigned int cmd)
{
SPI_WriteByte(cmd >> 8); // 发送高字节(控制+地址)
SPI_WriteByte(cmd); // 发送低字节(数据)
// 延时确保满足t8时序要求(最小20ns)
_nop_();
_nop_();
_nop_();
}
void main()
{
//总体设置(允许访问特殊功能寄存器,允许触发中断)
P_SW2 |= 0x80; //使能访问特殊功能寄存器(使能后才能访问特殊功能寄存器)
EA = 1; //中断允许寄存器(CPU开放中断)
//单片机管脚初始化(对管脚进行设置)
//LED初始化,点亮
//LED_Init();
//PWM管脚初始化
P1M1 = 0x00; //设置P1的所有管脚都为准双向口
P1M0 = 0x00;
// P3.3 ~ P3.7 配置为高阻输入:对应 P3M1 的 bit3~bit7 置 1,P3M0 的 bit3~bit7 置 0
P3M1 |= 0xF8; // 1111 1000:bit3~bit7 置 1(高阻输入需要 PnM1=1)
P3M0 &= 0x07; // 0000 0111:bit3~bit7 置 0(高阻输入需要 PnM0=0)
// P3 其他引脚(P3.0 ~ P3.2)保持准双向口:默认已为 0(若被修改过,可显式清 0)
P3M1 &= 0x07; // 确保 P3.0 ~ P3.2 的 PnM1=0
P3M0 &= 0x07; // 确保 P3.0 ~ P3.2 的 PnM0=0
// P2.0 ~ P2.1 配置为高阻输入:对应 P2M1 的 bit0~bit1 置 1,P2M0 的 bit0~bit1 置 0
P2M1 |= 0x03; // 0000 0011:bit0~bit1 置 1(高阻输入需要 PnM1=1)
P2M0 &= 0xFC; // 1111 1100:bit0~bit1 置 0(高阻输入需要 PnM0=0)
// P2.2 (SS): 推挽输出(即使不使用,也建议配置)
P2M1 &= ~(1 << 2);
P2M0 |= (1 << 2); // 推挽输出
// SCLK (P2.5) -> 推挽输出
P2M1 &= ~(1 << 5);
P2M0 |= (1 << 5);
// MOSI (P2.3) -> 推挽输出
P2M1 &= ~(1 << 3);
P2M0 |= (1 << 3);
// MISO (P2.4) -> 高阻输入
P2M1 |= (1 << 4);
P2M0 &= ~(1 << 4);
// P2.6~P2.7: 准双向口(按您要求)
P2M1 &= ~(0xC0); // 清除 P2.6/P2.7 的 M1 位 (1100 0000)
P2M0 &= ~(0xC0); // 清除 P2.6/P2.7 的 M0 位
SPI_SCLK_2 = 0;
SPI_MOSI_2 = 1;
P_SW1 = 0x04;
SPI_Init( );
} |
|