ATmega128 AVR单片机的SPI总线通信 MOSI输出为啥总是高电平
最近在ATmega128AVR单片机上调SPI总线通信,初始化后,测量MOSI管脚输出,结果初始化之后从0变成了1。而且降不回来,求大神指点,这个是正常的吗?我想让默认输...
最近在ATmega128 AVR单片机上调SPI总线通信,初始化后,测量MOSI管脚输出,结果初始化之后从0变成了1。而且降不回来,求大神指点,这个是正常的吗?我想让默认输出是0咋办?
初始化之前:
初始化代码:SPI_INIT()
{
DDRB|=(1<<SCLK)|(1<<MOSI);
PORTB|=(0<<MOSI); //初始化之前是低
SPCR|=(1<<SPE)|(1<<MSTR)|(1<<SPR0); //初始化之后变高
PORTB|=(0<<MOSI); //再来一下也不会变低
}
刚刚代码贴错了,
应该是
初始化代码:SPI_INIT()
{
DDRB|=(1<<SCLK)|(1<<MOSI);
PORTB&=(0<<MOSI); //初始化之前是低
SPCR|=(1<<SPE)|(1<<MSTR)|(1<<SPR0); //初始化之后变高
PORTB&=(0<<MOSI); //再来一下也不会变低
} 展开
初始化之前:
初始化代码:SPI_INIT()
{
DDRB|=(1<<SCLK)|(1<<MOSI);
PORTB|=(0<<MOSI); //初始化之前是低
SPCR|=(1<<SPE)|(1<<MSTR)|(1<<SPR0); //初始化之后变高
PORTB|=(0<<MOSI); //再来一下也不会变低
}
刚刚代码贴错了,
应该是
初始化代码:SPI_INIT()
{
DDRB|=(1<<SCLK)|(1<<MOSI);
PORTB&=(0<<MOSI); //初始化之前是低
SPCR|=(1<<SPE)|(1<<MSTR)|(1<<SPR0); //初始化之后变高
PORTB&=(0<<MOSI); //再来一下也不会变低
} 展开
2个回答
展开全部
追问
我看过这个,这个只是定SCK的高低电平,而非定MOSI的,这几种模式只是选择在SCK的高/低电平上升沿/下降沿比较,和定SCK空闲时是高/低电平的。谢谢!
追答
我认为在SPI初始化以后,MOSI、SCK这些管脚都变成了SPI专用pin,而不再是GPIO,不需要去配置输出输入,而且应该不受普通GPIO配置管理。MOSI管脚在SPI传输数据时是根据数据决定其高低电平,没必要一定让其默认输出0。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
关注这个问题
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询