
您好,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。
(((uint32_t)0x60020000) )是32位的IO地址(物理地址,硬件上设定的,不可修改)
(__IO uint16_t )是读取该地址的参数值,其值为16位参数
实际上是读取0x60020000寄存器的参数,或者可以说是这个IO口现在的状态
1、将STM32单片机连接到示波器,将示波器探头的地线连接到STM32单片机的GND引脚。
2、在STM32程序中配置需要测试的IO口为输出模式,并设置输出高电平或低电平的时间。
3、在示波器上打开波形显示功能,并将探头分别连接到需要测试的IO口和GND引脚。
4、在示波器上观察波形,根据预期输出的高低电平时间和示波器上实际显示的波形进行对比,判断该IO口的输出是否符合预期。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)