2025年单片机程序可以读出来吗知乎(单片机的程序能读出吗)

单片机程序可以读出来吗知乎(单片机的程序能读出吗)源于 b 站 up 主 竞赛窖头 使用的是 hal 库 芯片 STM32F103VET nbsp 野火指南者 对于平常读取按键的写法 大家可能就是按照 江科大 或者 其他商家给的模板来进行读取 今天 我将使用寄存器的角度 来分析读取 先给大家上代码 1 ws driver borad c 我自己的文件 大家可以改 nbsp nbsp 1 对于这个读取 我们给了一个 io 作为传入参数 io 是 寄存器 与 我们想要读取的按键范围 进行逻辑或的结果 2 0xff



##源于b站up主 竞赛窖头 使用的是 hal库 芯片:STM32F103VET6  野火指南者

对于平常读取按键的写法 大家可能就是按照 江科大 或者 其他商家给的模板来进行读取。

今天,我将使用寄存器的角度 来分析读取。 先给大家上代码

1.ws_driver_borad.c (我自己的文件 大家可以改)

 

 

 

1.对于这个读取, 我们给了一个 io作为传入参数 io 是 寄存器 与 我们想要读取的按键范围 进行逻辑或的结果。

2.0xff 作为没有按下按键的判断 因为 我们这里是上拉操作,GPIO口的读取是默认---高电平,那么没有进行按键按下操作时,我们读入的,不都是高电平。

3.countflag 是我们用来进行 按键消除抖动的 ,并且给了它一个静态处理,当每次进入该函数时,这个变量才会改变。  这里是利用单片机 中的while(1) 循环读取 按键。 所以countflag 一旦到2的时候,就进入 对按键的键值判断。

4.这里的判断是 以io的值进行判断 , 请看到我的注释处 罗列出来的二进制,可以看到 键值与0的位置相对应。 符合对应的条件 就返回 键值。

 

这个代码就是对应的读取方法。

用法:

1.GPIOx  是 你按键所在的GPIO, 我这里的按键1 是在 PA0 所以我给的是 GPIOA

2.GPIOX->IDR 这个请查你的数据手册了解具体作用,这个是通用的哈。 我们只能读取它的低16位数,所对应的就是它的引脚。每一位都有对应的引脚。

比如说 PA0  --- GPIOA->IDR的第0位, 那么如果我们只需读取第0位呢?  使用逻辑或的方式。想要读取的那一位,我们设置为0 .其他的都为1 , 这个寄存器是32位的,所以高16位,我们都给1。也就是0xff , 低16位,是我们要进行操作的。  比如说我要读取第0位 。 那么我就给

0xfffe. 我们现在只关注低16位 也就是 1111 1110  你看我这里的第0位 是不是0? 如果想多读连续几位, 比如说读5位,那么按键范围就是 sw1- sw5  ---- 0xffe0  低16位 也就是 这个---1110 0000 。

在这里,你看到我还有一个(uint8_t)的强制类型转换操作。 因为我只需读取低8位的话,我就直接限制读取范围了,这样就更加精确了。 记住了GPIOx->IDR 的高16位是不能进行操作的。 只有低16位才可以进行操作。 

以上就是我对这次学习的总结。如果有任何疑问,欢迎留言讨论。

编程小号
上一篇 2025-03-07 16:06
下一篇 2025-02-19 19:40

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/bian-cheng-ri-ji/59679.html