STM8 的MCU有四个供电单元
【STM8-SO8】08-STM8L001J3的点灯
STM8单片机如何实现Bootloader
基于STM8的DALI (数字可寻址调光协议)
开源基于STM32的STM8脱机编程器
【ST MCU实战经验】之STM8中UART奇偶校验的使用方法
【思修电子STM8集合贴】龙顺宇STM8理论/实战视频/书籍/软件/
初次尝试STM8S001J3
分享STM8 风驰光盘的资料,是完整的(包括原理图+例程+PDF注释)
基于STM8的实验代码汇总分享
微信公众号
手机版
先输出SCK引脚电平,再停止SPI接口模块,原来的顺序反了。
// 因为SPI接口模块被停止,无法控制SCK引脚电平
#define MFHSpiModSpiOff( ) if (SPICR1 & (u8)( ((1<<spiCPOL )))) \
{ \
MFH_PIN_OUT_SETH_SpiSclk; \
} \
else \
{ \
MFH_PIN_OUT_CLRL_SpiSclk; \
} \
SPICR1 &= (u8)(~((1<<spiEN ))) ;
#ifdef PreHt1621AccessingUseCommSpi // “HT1621 字符液晶使用SPI接口访问”条件编译
// 写入全部的字段数值变量静态随机数据缓冲区数值
if ( (gbitHt1621.WrRam == SET)
&& (gbitSpi.Busy == CLEAR) )
{
switch (gstvSpi.StepSpi) // 判断SPI接口操作步骤值?
{
case 0: // 步骤1:发送“禁止 HT1381 写入保护”操作命令
{
HSB(cHt1621SegSize) = (cHt1621WriteRev >> 1);
#ifdef PreHt1621IdleWrPinAsInput // “写使能信号引脚空闲时为输入引脚”条件编译
MFH_PIN_CFG_OUTL_Ht1621Wr; // 设置 HT1621 写使能引脚为输出引脚,并确保为L电平(没有操作时)
#else
MFH_PIN_OUT_CLRL_Ht1621Wr; // 确保 HT1621 写使能引脚为L电平(没有操作时)
#endif // “PreHt1621IdleWrPinAsInput”
MFH_PIN_OUT_CLRL_Ht1621Cs; // 使能 HT1621 片选信号(L电平)
Ht1621SendBitMsb(cHt1621Write, 1); // 写入标志码“101(数据写入模式)”的第1位
CommSpiTxWithData(&HSB(cHt1621SegSize), 1); // 写入标志码“101”的第2~3位和“Addr”的高 6 位
//#ifdef PreHt1621IdleWrPinAsInput // “写使能信号引脚空闲时为输入引脚”条件编译
// MFH_PIN_CFG_OUTL_Ht1621Wr; // 设置 HT1621 写使能引脚为输出引脚,并确保为L电平(没有操作时)
//#else
// MFH_PIN_OUT_CLRL_Ht1621Wr; // 确保 HT1621 写使能引脚为L电平(没有操作时)
//#endif // “PreHt1621IdleWrPinAsInput”
// MFH_PIN_OUT_CLRL_Ht1621Cs; // 使能 HT1621 片选信号(L电平)
// Ht1621SendBitMsb(cHt1621Write, 3); // 写入标志码“101(数据写入模式)”
// Ht1621SendBitMsb(0x00, 6); // 写入“Addr”的高 6 位
gstvSpi.StepSpi++; // SPI接口操作步骤指向下一步
break;
}
case 1: // 步骤2:连续写入“全部的字段数值变量静态随机数据缓冲区”中的数据
{
CommSpiTxWithData(&HSB(0), cHt1621SegSize);
gstvSpi.StepSpi++; // SPI接口操作步骤指向下一步
break;
}
case 2: // 步骤3:
{
MFH_PIN_OUT_SETH_Ht1621Cs; // 禁止 HT1621 片选信号(H电平)
gstvSpi.StepSpi++; // SPI接口操作步骤指向下一步
break;
}
default:
{
gbitHt1621.WrRdy = CLEAR; // 清除“写入输出映射缓冲区的数据准备就绪”标志
gbitHt1621.WrRam = CLEAR; // 清除“正在写入输出映射缓冲区的数据”标志
CommSpiClrSpiOk( ); // 清除“占用SPI接口”标志
break;
}
}
}
if ( (gbitHt1621.WrRdy == SET)
&& (gbitHt1621.WrRam == CLEAR)
&& (gbitSpi.SpiOk == CLEAR) )
{
CommSpiSetSpiOk( ); // 设置“占用SPI接口”标志
CommSpiBusModeDfLhMl(cSpiSpicrCfgDLL256); // 设置SPI接口为数据锁存在第1个时钟沿、空闲时SCK为低电平、LSB首先发送
gbitHt1621.WrRdy = CLEAR; // 清除“写入输出映射缓冲区的数据准备就绪”标志
gbitHt1621.WrRam = SET; // 置“正在写入输出映射缓冲区的数据”标志
}
#endif // “PreHt1621AccessingUseCommSpi”
{
unsigned char Other : 1; // 显示其他模式的映射缓冲区
unsigned char Blink : 1; // 闪烁状态为打开显示方式
unsigned char Now : 1; // 立即更新输出映射缓冲区的数据
unsigned char WrRdy : 1; // 写入输出映射缓冲区的数据准备就绪
unsigned char WrRam : 1; // 正在写入输出映射缓冲区的数据
unsigned char Nte : 1; // 立即更新输出映射缓冲区的数据
unsigned char unusedBits : 3;
} Ht1621FlagBits;
哥,我想要的不是HT1621这部分。
我想向您学习3线SPI接口,9bit模式应该怎么设置;指令数据选择位(D/C)怎么下发;
那个SPI_SendData();库函数只能下发8bit。
还有,我也不明白通讯例程中为什么都是设置为从模式?
主动与其它IC通讯时,MCU不是应该设置为主模式吗?