[综合信息] 对GPIO操作如何避免入坑

[复制链接]
9882|9
手机看帖
扫描二维码
随时随地手机跟帖
白虎姐|  楼主 | 2021-9-24 17:27 | 显示全部楼层 |阅读模式
GPIO, RAM, TI, TE, se, tv
在使用单片机时对GPIO操作是最基础的操作,即使这种操作如果不注意还是会掉到坑里去。例如:使用同一组GPIO端口中的两个引脚(PA00和PA01)做输出,PA00在主循环中改变输出状态,PA01通过中断方式改变输出状态。正常的情况应该是PA00只在主循环中改变输出状态,而PA01只会在中断发生时改变输出状态。但是,随着程序运行时间的加长或者在主循环中提高PA00输出的频率,会发现本应该在中断中完成状态改变的PA01,个别时候状态会不发生改变。而在中断服务程序中设置断点,进行debug发现中断可以正常进入,也能正常改变PA01的输出状态。要想分析造成这个情况的原因可以从官方提供的DDL库入手来分析。华大单片机M0+系列芯片在对GPIO端口输出电平操作时,DDL库提供了如下两种方法:
方法1:
<p><font face="微软雅黑" size="3">/*****************************************************************************

** \brief GPIO IO输出值写入

**

** \param [in]  enPort          IO Port口

** \param [in]  enPin           IO Pin脚

** \param [out] bVal            输出值

**

** \retval en_result_t           Ok          设置成功

**                                         其他值    设置失败

******************************************************************************/

en_result_t Gpio_WriteOutputIO(en_gpio_port_t enPort, en_gpio_pin_t enPin, boolean_t bVal)

{

    SetBit(((uint32_t)&M0P_GPIO->PAOUT + enPort), enPin, bVal);</font></p><p><font face="微软雅黑" size="3">    return Ok;

}</font></p>

方法2:
<p><font face="微软雅黑" size="3">/*******************************************************************************

** \brief GPIO IO设置

**

** \param [in]  enPort          IO Port口

** \param [in]  enPin           IO Pin脚

**

** \retval en_result_t           Ok        设置成功

**                                        其他值   设置失败

******************************************************************************/
更多信息咨询请联系angel.qi:13827489351(微信与手机号码同步)
en_result_t Gpio_SetIO(en_gpio_port_t enPort, en_gpio_pin_t enPin)

{

    SetBit(((uint32_t)&M0P_GPIO->PABSET + enPort), enPin, TRUE);</font></p><p><font face="微软雅黑" size="3">    return Ok;

}</font></p><p><font face="微软雅黑" size="3">

</font></p><p><font face="微软雅黑" size="3">/******************************************************************************

** \brief GPIO IO清零

**

** \param [in]  enPort          IO Port口

** \param [in]  enPin           IO Pin脚

**

** \retval en_result_t           Ok        设置成功

**                                         其他值  设置失败

*********************************

使用特权

评论回复
yelong98| | 2021-9-25 09:02 | 显示全部楼层
原因是啥?怎么解决?

使用特权

评论回复
zchong| | 2021-9-25 13:56 | 显示全部楼层
脑袋要始终保持清醒,多处使用某个资源需要注意完整性问题。

使用特权

评论回复
cooldog123pp| | 2021-9-25 17:10 | 显示全部楼层
楼主讲的很详细,非常感谢楼主的讲解,mark一下,收藏学习,受教受教。

使用特权

评论回复
littlelida| | 2021-10-4 14:46 | 显示全部楼层
感觉,断断续续,简单的东西复杂了呢

使用特权

评论回复
chenjun89| | 2021-10-5 14:44 | 显示全部楼层
谢谢楼主分享避坑经验

使用特权

评论回复
caigang13| | 2021-10-5 14:56 | 显示全部楼层
讲解详细,谢谢分享。

使用特权

评论回复
海滨消消| | 2021-10-8 10:50 | 显示全部楼层
趁着有空闲时间好好琢磨一下

使用特权

评论回复
sparrow054| | 2021-10-9 10:35 | 显示全部楼层
你们都看明白了?

使用特权

评论回复
wubangmi| | 2021-10-9 15:08 | 显示全部楼层
到最后也没看出来结果是什么。
我停别人说这个就是MCU的竞争冒险机制

使用特权

评论回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则

我要发帖 我要提问 投诉建议 申请版主

本版热帖

本版活跃用户

优质原创写原创,赢大奖

编辑推荐

  • 1 呐咯密密 得到打赏 ¥310.00
  • 2 qbwww 得到打赏 ¥215.00
  • 3 yanzhengxin1 得到打赏 ¥150.00
  • 4 full_stack 得到打赏 ¥100.00
  • 5 laocuo1142 得到打赏 ¥55.00
  • 6 zhangjiantao 得到打赏 ¥50.00
  • 7 二哲科技 得到打赏 ¥50.00
  • 8 cjseng 得到打赏 ¥50.00
  • 9 qintian0303 得到打赏 ¥25.00
  • 10 逍遥李 得到打赏 ¥20.00
在线客服 快速回复 返回顶部 返回列表