社区
单片机/工控
帖子详情
萌新求助!stm32 GPIO_ReadInputDataBit读取数据问题??
Hadron_pan
2020-04-25 11:41:16
我用GPIO_ReadInputDataBit读取GPIOA 0口设置为上拉输入
用proteus仿真时,GPIO_ReadInputDataBit返回值一直是0.按理说没按下的话,读到的应该是1,灯熄灭。
...全文
1021
2
打赏
收藏
萌新求助!stm32 GPIO_ReadInputDataBit读取数据问题??
我用GPIO_ReadInputDataBit读取GPIOA 0口设置为上拉输入 用proteus仿真时,GPIO_ReadInputDataBit返回值一直是0.按理说没按下的话,读到的应该是1,灯熄灭。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
2 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
Ye_Shi_Wo
2021-01-25
打赏
举报
回复
我来踩你啦,记得回踩
yishumei
2020-04-26
打赏
举报
回复
右键查看一下按键的初始状态
介绍
STM32
标准库函数说明及函数的使用方法 专栏 1
STM32
固件库函数之通用输入/输出(
GPIO
)函数的介绍及使用
介绍
STM32
标准库函数说明及函数的使用方法 专栏 1
STM32
固件库函数之通用输入/输出(
GPIO
)函数的介绍及使用。 序号 函数名 描述 1
GPIO
_DeInit 将外设
GPIO
x 寄存器重设为默认值 2
GPIO
_Init 根据
GPIO
_InitStruct 中指定的参数初始化外设
GPIO
x 寄存器 3
GPIO
_StructInit 把
GPIO
_InitStruct 中的每一个参数按默认值填入 4
GPIO
_PinLockConfig 锁定
GPIO
管脚设置寄存器 5
GPIO
_
Read
Input
Data
Bit
读取指定端口管脚的输入 6
GPIO
_
Read
Input
Data
读取指定的
GPIO
端口输入 7
GPIO
_
Read
Output
Data
Bit
读取指定端口管脚的输出 8
GPIO
_
Read
Output
Data
读取指定的
GPIO
端口输出 9
GPIO
_Set
Bit
s 设置指定的数据端口位 10
GPIO
_Reset
Bit
s 清除指定的数据端口位 11
GPIO
_Write
Bit
设置或者清除指定的数据端口位 12 等等..........
STM32
调试报告.docx
STM32
调试报告 1、头文件 初始化相应的函数,同时最好将相应的引脚进行宏定义,方便后面写主函数时方面。 2、 c函数 c函数要将相应的头文件包括进去,同时初始化相应头文件里面的自己定义的函数。对相应的函数进行编写,包括引入结构体,时钟初始化,选择相应的引脚、引脚输入输出模式、如果是输出需要设置输出速度。 3、 main函数 4、
GPIO
端口七个寄存器 两个32位配置寄存器
GPIO
_CRL AND
GPIO
_CRH. TWO 32
bit
dateregister
GPIO
_IDR AND DPIO_ODR 一个32位置位/复位寄存器
GPIO
_BSRR 一个16位复位寄存器
GPIO
_BRR 一个32位锁存寄存器
GPIO
_LCKR
GPIO
_CRL寄存器的复位值为 0X4444 4444,从图 6.1.4 可以看到,复位值其实就是配置端口为浮空 输入模式。从上图还可以得出:
STM32
的 CRL 控制着每组 IO 端口(A~G)的低 8 位的模式。 每个 IO 端口的位占用 CRL 的 4 个位,高两位为 CNF,低两位为 MODE。这里我们可以记住几 个常用的配置,比如 0X0 表示模拟输入模式(ADC 用)、0X3 表示推挽输出模式(做输出口用, 50M 速率)、0X8 表示上/下拉输入模式(做输入口用)、0XB 表示复用输出(使用 IO 口的第二 功能,50M 速率)。 在固件库中操作 IDR 寄存器读取 IO 端口数据是通过
GPIO
_
Read
Input
Data
Bit
函数实现的: uint8_t
GPIO
_
Read
Input
Data
Bit
(
GPIO
_TypeDef*
GPIO
x, uint16_t
GPIO
_Pin) 比如我要读
GPIO
A.5 的电平状态,那么方法是:
GPIO
_
Read
Input
Data
Bit
(
GPIO
A,
GPIO
_Pin_5); 返回值是 1(
Bit
_SET)或者 0(
Bit
_RESET); 在固件库中设置 ODR 寄存器的值来控制 IO 口的输出状态是通过函数
GPIO
_Write 来实现 的: void
GPIO
_Write(
GPIO
_TypeDef*
GPIO
x, uint16_t PortVal);
GPIO
_Write
Bit
(
GPIO
R,
GPIO
_Pin_0,(
Bit
Action)(1));//LED控制 位操作使用ODR AND IDP寄存器 在使用寄存器BSRR 和寄存器BRR时,使用规则总结如下: 1、置
GPIO
D->BSRR低16位的某位为’1’,则对应的I/O端口置’1’;而置
GPIO
D->BSRR低16位的某位为’0’,则对应的I/O端口不变。 2、置
GPIO
D->BSRR高16位的某位为’1’,则对应的I/O端口置’0’;而置
GPIO
D->BSRR高16位的某位为’0’,则对应的I/O端口不变。 3、置
GPIO
D->BRR低16位的某位为’1’,则对应的I/O端口置’0’;而置
GPIO
D->BRR低16位的某位为’0’,则对应的I/O端口不变。 使用场合举例如下: 1)要设置D0、D5、D10、D11为高,而保持其它I/O口不变,只需一行语句:
GPIO
D->BSRR = 0x0C21;// 使用规则1 2)要设置D1、D3、D14、D15为低,而保持其它I/O口不变,只需一行语句:
GPIO
D->BRR = 0xC00A;// 使用规则三 3)要同时设置D0、D5、D10、D11为高,设置D1、D3、D14、D15为低,而保持其它I/O口不变,也只需一行语句:
GPIO
D->BSRR = 0xC00A0C21;// 使用规则一和规则二 实例3 假设需要对
GPIO
A_Pin_6 输出高电平。采用改写 ODR 寄存器的方式时,使用“读-改-写”操作,代码如下: uint32_t temp; temp =
GPIO
A->ODR; temp = temp |
GPIO
_Pin_4;
GPIO
A->ODR = temp; 而使用改写 BSRR 寄存器时,仅需要使用如下语句:
GPIO
A->BSRR =
GPIO
_Pin_6; 在修改 ODR 时,为了确保对端口 6 的修改不会影响到其他端口的输出,需要对端口的原始数据进行保存,之后再对端口 6 的值进行修改,最后再写入寄存器(即读-改-写形式改变位的状态)。而对 BSRR 的操作,是写 1 有效,写 0 不改变原状态,因此可以对端口 6 置 1,其他位保持为 0。BSRR 为 1 的位,会修改相应的 ODR 位,从而控制输出电平。 因此,在设置单个 IO 口输出时,使用 BSRR 进行操作会更加方便。 在固件库中操作 IDR 寄存器
iicmpu9250.rar
stm32
f103rct6 模拟iic 驱动mpu9250 驱动部分由网络上参考移植 移植需要修改的宏定义 #define I2C_SDA_H
GPIO
_Set
Bit
s(
GPIO
B,
GPIO
_Pin_0) //实现SDA高电平 #define I2C_SDA_L
GPIO
_Reset
Bit
s(
GPIO
B,
GPIO
_Pin_0) #define I2C_SCL_H
GPIO
_Set
Bit
s(
GPIO
B,
GPIO
_Pin_1) #define I2C_SCL_L
GPIO
_Reset
Bit
s(
GPIO
B,
GPIO
_Pin_1) #define I2C_SDA_GET
GPIO
_
Read
Input
Data
Bit
(
GPIO
B,
GPIO
_Pin_0)//定义读取iic数据 是一个if条件 需要修改的函数 /*************************************************************** ?Name: II2_Config ?Params: void ?Return: void ?Description: 配置引脚工作模式 ***************************************************************/ /* SCL=>PB6 SDA=>PB7 */ void I2C_Work_Init(void) {
GPIO
_InitTypeDef
GPIO
_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_
GPIO
B, ENABLE);
GPIO
_InitStructure.
GPIO
_Pin =
GPIO
_Pin_6|
GPIO
_Pin_7;
GPIO
_InitStructure.
GPIO
_Mode =
GPIO
_Mode_Out_PP; //设置引脚模式为推免输出模式
GPIO
_InitStructure.
GPIO
_Speed =
GPIO
_Speed_50MHz;//设置引脚速度为50MHZ
GPIO
_Init(
GPIO
B, &
GPIO
;_InitStructure);//调用库函数,初始化
GPIO
} void Mpu_IO_OUT(void){
GPIO
_InitTypeDef
GPIO
_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_
GPIO
B, ENABLE);
GPIO
_InitStructure.
GPIO
_Pin =
GPIO
_Pin_0;
GPIO
_InitStructure.
GPIO
_Mode =
GPIO
_Mode_Out_PP; //设置引脚模式为推免输出模式
GPIO
_InitStructure.
GPIO
_Speed =
GPIO
_Speed_50MHz;//设置引脚速度为50MHZ
GPIO
_Init(
GPIO
B, &
GPIO
;_InitStructure);//调用库函数,初始化
GPIO
} void Mpu_IO_IN(void){
GPIO
_InitTypeDef
GPIO
_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_
GPIO
B, ENABLE);
GPIO
_InitStructure.
GPIO
_Pin =
GPIO
_Pin_0;
GPIO
_InitStructure.
GPIO
_Mode =
GPIO
_Mode_IPU;
GPIO
_Init(
GPIO
B, &
GPIO
;_InitStructure); } 可能需要修改的函数(延时) void Delay_ms(uint16_t nms) { uint16_t i,j; for(j = nms;j > 0;j --) for(i = 0;i < 1000;i ++); } void Delay_us(u32 ustime) { // us级别的时间,NOP方式,72Mhz主频 u32 i; for(i=0;i
data Mpu9250; extern void I2C_Work_Init(void);//模拟iic初始化引脚 extern int Mpu9250_Work_Mode_Init(void);//初始化 extern void
READ
_MPU9250_MAG(void) ;//读取地磁 extern void
READ
_MPU9250_GYRO(void) ;//读取陀螺仪 extern void
READ
_MPU9250_ACCEL(void) ;//读取加速度
STM32
按键输入实验.zip
使用
STM32
做出的按键输入实验,亲测能用,
STM32
的IO做输入使用的时候,是通过调用函数
GPIO
_
Read
Input
Data
Bit
( )来读取IO口的状态的,程序功能:通过按键控制小灯的亮灭,三个按键对应得IO分别是PA15。
杭电电子综合设计.docx
杭电电子综合设计全文共4页,当前为第1页。杭电电子综合设计全文共4页,当前为第1页。 杭电电子综合设计全文共4页,当前为第1页。 杭电电子综合设计全文共4页,当前为第1页。 课程设计报告 课程设计名称 电子系统综合设计 实验内容
STM32
与PC通信 姓名 学号 专业 电子信息工程 批次 指导教师 二 一三年 七 月 十 日 杭电电子综合设计全文共4页,当前为第2页。杭电电子综合设计全文共4页,当前为第2页。系统框图 杭电电子综合设计全文共4页,当前为第2页。 杭电电子综合设计全文共4页,当前为第2页。 用一个图描述课程设计所涉及的电子系统的原理框图(非原理图)
STM32
端关键代码 1、if (ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC) == SET) { adval = ADC_GetConversionValue(ADC1); sprintf((char *)sendstr, "%.1fv\r\n", adval * 3.3 / 4096); USART1_Puts(sendstr); } 单片机进行模拟采样,将采样值赋给adval,对adval进行AD转换,sprintf((char *)sendstr, "%.1fv\r\n", adval * 3.3 / 4096);的函数原型为:sprintf( char *buffer, const char *format, [ argument] … );本句是将ad的值表示成有一位小数的浮点数,然后再在后面加上'v'和换行字符一起放到数组sendst中r 2、oldkey = 0; while (1) { if (
GPIO
_
Read
Input
Data
Bit
(
GPIO
A,
GPIO
_Pin_8) == RESET) key = 2; else if(
GPIO
_
Read
Input
Data
Bit
(
GPIO
A,
GPIO
_Pin_15) == RESET) 杭电电子综合设计全文共4页,当前为第3页。杭电电子综合设计全文共4页,当前为第3页。 key = 3; 杭电电子综合设计全文共4页,当前为第3页。 杭电电子综合设计全文共4页,当前为第3页。 else key = 0; if(key != oldkey) ……… ……… } 不断的检测按键 2,3是否被按下,然后对key进行赋值,在判断原来键值的状态, 然后将信息发送给PC机。 3、USART_InitStructure.USART_BaudRate = 9600; //波特率//9600bps USART_InitStructure.USART_WordLength = USART_WordLength_8b; //数//据位8位 PC端关键代码 1、void CMy09082212Dlg::
Data
Scan(const CString &str) { //检测下位机上传电压信息 *,*v if (str.GetLength() >= 4 && str[7] == 'v') { double dat = atof(str); if(dat < 0) dat = 0; else if(dat > 3.3) dat = 3.3; if(v_
data
.size() > 260) v_
data
.erase(v_
data
.begin(), v_
data
.begin() + 1); v_
data
.push_back(dat); DrawBK(); Draw
Data
(); } } 对单片机发送的数据进行读取,对数组str的位长和7位进行判断,当位长大于等于4且第7位为'v',将字符串str转换成浮点数赋给dat,当dat小于等于0时,dat=0;当dat大于等于3.3时,dat=3.3。由于我们在画图时定义宽度为260个点,杭电电子综合设计全文共4页,当前为第4页。杭电电子综合设计全文共4页,当前为第4页。所以当
data
的位数大于260时,删除多于的数据,做出数据图表和数据曲线。 杭电电子综合设计全文共4页,当前为第4页。 杭电电子综合设计全文共4页,当前为第4页。 2、dc.FillSolidRect(280, 100, 260, 200, RGB(255, 255, 255));//设置画图的起始坐标以及//图的宽度和高度,RGB(, , )用来设置填充的颜色,此处设置的为白色。 CPen ps(PS_DOT, 1, RGB(64, 64, 64));//设置划虚线的颜色(灰) 3、CPen ps(PS_SOLID, 1, RGB(0, 128, 0));设置对上传到的AD划线的颜色(暗绿色) 4、void CMy09082212Dlg::OnButtonSend() { CString str; Ge
单片机/工控
27,375
社区成员
28,770
社区内容
发帖
与我相关
我的任务
单片机/工控
硬件/嵌入开发 单片机/工控
复制链接
扫一扫
分享
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章