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); //再来一下也不会变低
}
展开
 我来答
时之默言
2015-02-09 · 超过39用户采纳过TA的回答
知道小有建树答主
回答量:55
采纳率:100%
帮助的人:50.9万
展开全部

看看这个,SPCR中的2、3位CPHA和CPOL可以确定SPI的传输格式,你可以重新配置一下SPCR寄存器试试。

追问
我看过这个,这个只是定SCK的高低电平,而非定MOSI的,这几种模式只是选择在SCK的高/低电平上升沿/下降沿比较,和定SCK空闲时是高/低电平的。谢谢!
追答
我认为在SPI初始化以后,MOSI、SCK这些管脚都变成了SPI专用pin,而不再是GPIO,不需要去配置输出输入,而且应该不受普通GPIO配置管理。MOSI管脚在SPI传输数据时是根据数据决定其高低电平,没必要一定让其默认输出0。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
查晓筠0i5
2015-02-09 · TA获得超过2752个赞
知道大有可为答主
回答量:2.1万
采纳率:1%
帮助的人:4905万
展开全部
关注这个问题
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式