本帖最后由 学习stm32f4 于 2018-8-17 17:43 编辑
如下面的简单程序:
[mw_shl_code=c,true]#include "sys.h"
#include "delay.h"
#include "led.h"
#include "usart.h"
int main(void)
{
delay_init(168);
uart_init(115200);
led_init();
while(1)
{
PFout(9)=0;
printf("LED0=%d
",(int)PFin(9));
delay_ms(1000);
PFout(9)=1;
printf("LED0=%d
",(int)PFin(9));
PFout(10)=0;
delay_ms(1000);
PFout(10)=1;
}
}[/mw_shl_code]
仿真时,串口打印正常,XCOM交替显示LED0=0与LED0=1,如图1所示。
但是单片机运行时,XCOM却一直显示LED0=0,如图2所示。
怎样解释这一现象呢?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
额,PFin()这个是直接读取GPIO口的输入寄存器吧,如果没有把引脚设置为输入模式,实际上这个寄存器的内容是不是连接在这个引脚上的,这样做可靠吗?
还有楼主想实现这个功能的话可以直接读PFout()的。
这使用了原子哥的位带操作,在sys.h里。
PFout(9)是使GPIOF9口输出0或1,而PFin(9)是读取GPIOF9引脚上的电平。
位带操作很方便。
[mw_shl_code=c,true]#include "sys.h"
#include "delay.h"
#include "led.h"
#include "usart.h"
int main(void)
{
delay_init(168);
uart_init(115200);
led_init();
while(1)
{
PFout(9)=0;
printf("LED0=%d ",(int)PFin(9));
delay_ms(1000);
PFout(9)=1;
PFout(9)=1;//重复一下,结果串口打印正常了,真是莫名其妙
printf("LED0=%d ",(int)PFin(9));
PFout(10)=0;
delay_ms(1000);
PFout(10)=1;
}
}[/mw_shl_code]
一周热门 更多>