完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
如题,以设置推免输出为例: 使用STM32的官方库,在设置通用IO模式的时候,语句如下: 右击GPIO_Mode_Out_PP,转到定义,如下: 对比stm32手册,查看其IO模式一共八个,GPIO_Mode_Out_PP根据stm32f10x_gpio.h注释文字是推免输出。 我们分析,这个枚举定义中,八个模式所赋值后一位分别为:十六进制的0,4,8,8,4,0,C,8。如果将其对应到下图寄存器中,即为0000,0100,1000,1000,0100,1100,1000;也就是说它们设置的CNFy[0:1]。 那么,在枚举定义中,所赋十六进制数的第一位的意思又是什么?我们继续看。这个值在应用时赋值给了GPIO_Mode。我们打开stm32f10x_gpio.c,查找GPIO_Mode。会找到如下结果: 这个值按位与操作后,第一位变成零,第二位保留原值,然后赋给了currentmode这个变量。 还没完,下边紧接着是一个if语句: 这一句就体现了GPIO_Mode值中的第一位的作用。if的判断语句中,通过按位与操作,区分出了输出和输入。如果是输出的话(注意看它们模式值的第一位,都是0x1),执行下边语句,将输出频率的模式值叠加到了currentmode上: 最后通过如下语句, 和 GPIOx->CRL = tmpreg;赋给当前端口的配置位上去。 通过分析,我们看出,模式设置中的0x--;第二位是设置值,第一位并没有具体的意义,它的作用只是将其和0x1按位与时,区分出输入还是输出。 下边关于GPIO_Mode_IPD和GPIO_Mode_IPU(上拉输入和下拉输入)还要多说两句。在模式配置时他们两个是一样的,但是怎样区分是上拉还是下拉呢?原来他们还和另外一个寄存器有关系,如下图: |
|
相关推荐
|
|
|
|
|
|
|
|
2183 浏览 1 评论
AD7686芯片不传输数据给STM32,但是手按住就会有数据。
2011 浏览 3 评论
4612 浏览 0 评论
如何解决MPU-9250与STM32通讯时,出现HAL_ERROR = 0x01U
2154 浏览 1 评论
hal库中i2c卡死在HAL_I2C_Master_Transmit
2687 浏览 1 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-25 12:16 , Processed in 0.685590 second(s), Total 76, Slave 58 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号