野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 17004|回复: 6

请教用库函数能读写端口不同功能的一部分位的值吗?

[复制链接]
发表于 2014-10-31 14:30:40 | 显示全部楼层 |阅读模式
学习stm32时间不长,有个问题请教前辈:

请教用库函数能读写16位端口不同功能的一部分位的值吗?

例如,假如读写PC端口,PC0-PC12设置为输入模式,PC13/TAMPER-RTC设置为输出模式,PC14/OSC32_IN和PC15/OSC32_OUT外接32.768KHz晶振,不设置。那么,能用库函数uint16_t GPIO_ReadInputData  ( GPIO_TypeDef *  GPIOx )正确读取PC0-PC12共13位的值,而不影响PC13的值吗?
回复

使用道具 举报

发表于 2014-10-31 14:55:54 | 显示全部楼层
不影响,你只是读没有写
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-11-3 12:51:58 | 显示全部楼层
本帖最后由 wxyz 于 2014-11-3 12:58 编辑

谢谢刀_口 的答复。如果写就有影响。那下面的问题怎样解决呢?

如果一组16位端口的较多位设置为输出,少部分位设置为输入,那么用库函数void GPIO_Write  ( GPIO_TypeDef *  GPIOx, uint16_t  PortVal )输出,怎样保证少部分输入的位不受影响呢?是用寄存器操作,还是将输入引脚的值读入,再用位运算放到输出的值中?
回复 支持 反对

使用道具 举报

发表于 2014-11-3 13:02:13 | 显示全部楼层
你必须要一组端口进行操作么?为什么不按位操作?
[code=c]                GPIO_ResetBits(GPIOC, GPIO_Pin_0);
                GPIO_SetBits(GPIOC, GPIO_Pin_4|GPIO_Pin_3);        [/code]
像这样拉低拉高不行么?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-11-4 09:08:26 | 显示全部楼层
本帖最后由 wxyz 于 2014-11-5 09:13 编辑
你必须要一组端口进行操作么?为什么不按位操作?
01.                GPIO_ResetBits(GPIOC, GPIO_Pin_0);
02.                GPIO_SetBits(GPIOC, GPIO_Pin_4|GPIO_Pin_3);        
像这样拉低拉高不行么?


想用stm32驱动多组四位一体的数码管,读取多组i2c接口的AD模数转换值,在多组数码管显示结果。想整体端口操作。位操作比较麻烦。晶振和usart1占用了一些端口。不能整个端口读写。
回复 支持 反对

使用道具 举报

发表于 2014-11-4 10:07:49 | 显示全部楼层
wxyz 发表于 2014-11-4 09:08
想用stm32驱动多组(15个以上)四位一体的数码管,读取多组(15组以上)i2c接口的ad模数转换值,在多组 ...

如果同一组端口有用到硬件功能,而又想整体操作IO是有点麻烦,但毕竟咱们都只是使用者,适应吧.
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-11-5 09:30:16 | 显示全部楼层
只好根据具体电路,自己定义一些读写的宏和函数操作数码管的各个段码和位码以及i2c的总线了。
回复 支持 反对

使用道具 举报

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

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-9-22 09:43 , Processed in 0.030225 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表