设置为开漏,上拉电阻。
读io的时候odr写1,然后读输入寄存器。
输出时写输出寄存器。
这就可以不改gpio模式情况下双向io了
STM32支持JTAG和SWD两种调试方式,且默认状态下这两种调试功能都是 开启 的。
由此我们可以知道:
如果要使用JTAG调试功能,那么PB3,PB4,PA13,PA14,PA15都不能使用;
而如果我们关闭JTAG功能,但是开启SWD调试功能,那么PB3,PB4,PA15都可以当作普通IO来使用了;
ST官方3.5的库有提供关闭调试功能的两个接口:
执行上面语句后,PB3,PB4,PA13,PA14,PA15都可以当作普通iO来使用,此时不能通过J-Link进行调试了;
执行上面语句后,PB3,PB4,PA15都可以当作普通iO来使用,且可以通过SWD进行调试。
建议程序启动时延时3-5秒后再关闭JTAG调试模式,如此,单片机断电复位后立即点击烧写按钮也是可以进行程序烧录的。
设置启动模式为ISP模式(BOOT0=1、BOOT1=0)或设置启动模式为RAM运行模式(BOOT0=1、BOOT1=1)。
将开发板断电后重新上电,此时就因不是在用户程序模式,因此就不会执行禁用JTAG的语句,JTAG功能也就可以正常使用。
设置启动模式为ISP模式(BOOT0=1、BOOT1=0),用ISP程序将STM32的FLASH擦除,之后就可恢复JTAG功能。
如果你的仿真器支持SWD仿真模式,如IAR下用JLINK、MDK下用ULINK2。直接将仿真器的模式设为SWD模,就可以不受这个禁止JTAG功能的影响了。
您好,STM32的GPIO口的功能是非常之强大的。 关于GPIO输出的赋值可以使用两种方法, 方法A:逐个配置法,优点是不会影响到其它的GPIO口,缺点是操作比较繁琐。 方法B:ODR设置法,优点是操作轻松,缺点是需要硬件电路作配合。 下面我们详细描述这两种方法: 方法A:所谓逐个配置法, 就是对需要输出数据的IO口线逐个配置, 需要输出为1的IO口使用GPIOx-BSS = 1 N; (N表示第N根线,如PA9, N值为9) 需要输出为0的IO口使用GPIOx-BRSS = 1 N; 使用如下语句可以完成 //to do 先将输出口配置为输出功能 for( i = start; i end; i++ ) { if( value 0x01 ) { GPIOx-BSS = 1 i; } else { GPIOx-BRSS = 1 i; } } 方法B: ODR配置法,可以直接使用 GPIO-ODR = value N;给对应的IO口进行输出操作。 但是此时在硬件上要保证: 1. 该功能口(如GPIOA)上的其余的IO口不作为普通的IO输出口使用(因为是键盘扫描,当列输出的时候,行应当是输入;同理,当列输入时,行应当是输出) 2. 行列之外的GPIO口,要么是普通的IO输入口,要么是功能口。功能口就是UART、USB、PWM、ADC等,对GPIO的ODR进行操作时,不会对功能口产生影响。 以上第2条是对第1条的详细解释。 总结:如果在硬件上可以满足方法B的应用条件,建议优先采用方法B。 在其它一些需要使用并行输出,如并口液晶、NandFlash等应该的时候,也可以考虑使用方法B。
推挽输出并不是一种电平,而是一种电压输出方式。你设置完输出方式后要执行一下输出电平才行。
比如你初始化完成后,加一句
GPIO_ResetBits(GPIOC,GPIO_Pin_6);
就把引脚PC6输出低电平了(这里只是举个例子,你需要把端口和引脚改为你自己的)。
本文标签:stm32配置io方向