请问STM32怎么才能并行 *** 作低八位的IO口或高八位的IO口?

请问STM32怎么才能并行 *** 作低八位的IO口或高八位的IO口?,第1张

您好,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 = starti <endi++ )

{

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。

用一个函数作为一个进程,每个进程都设一个栈空间来保存它的工作寄存器值。用时钟中断来产生cpu片段,每次进入时间中断函数就讲当前进程的工作寄存器值入栈,pc指针入栈,然后从下一个进程的栈中取出工作寄存器值,pc指针,运行。直到下一个时钟中断又重复 *** 作。不停地循环下去,每个进程(也是函数)每一次都只执行一小段时间,就成了多线程 *** 作系统了。我只能这样空泛地说,因为一个多线程 *** 作系统的实现太复杂了!你可以去看看ucosii相应的教材。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9437830.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-28
下一篇 2023-04-28

发表评论

登录后才能评论

评论列表(0条)

保存