历史上的今天
今天是:2025年03月04日(星期二)
正在发生
2020年03月04日 | ATmega168的SPI发送完寄存器SPIF不置位的问题
2020-03-04 来源:eefocus
利用ATmega168的硬件SPI驱动74HC595来扩展串行接口。把MOSI和SCK设置为输出,然后设置好寄存器。,具体如下:
static void vSpi595Init(void)
{
DDRB|=(1<
DDRD|=(1<
SPCR=(1< } 然后调用如下的发送函数 static void vSPIMasterTransmit(unsigned char ucData) { SS_L();//拉低存储寄存器时钟 SPDR = ucData;// 启动数据传输 while(!(SPSR & (1< SS_H();//拉高存储寄存器时钟 } 却发现死活不产生SPIF的中断。更换芯片,调整时钟和SPI数率都不管用。 后来去ouravr网站去搜,发现好多人碰到同样的问题,并且恰恰有个人给出了解决方法。就是需要把SS管脚设置为输出才行。 修改后的初始化函数为 static void vSpi595Init(void) { DDRB|=(1< DDRD|=(1< SPCR=(1< } 就是说当作为主机的时候,SS必须设置为输出,而芯片复位后该SS引脚默认为输入,所以必须程序中主动设置一下。再Datasheet里面好像也没有明确指出这一点。
推荐阅读
史海拾趣




