OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4906|回复: 1

GPIO复用推挽输出设置

[复制链接]

6

主题

23

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
370
金钱
370
注册时间
2014-12-15
在线时间
66 小时
发表于 2014-12-15 17:35:08 | 显示全部楼层 |阅读模式
5金钱
GPIO_Mode_Out_PP=0x10;//通用推挽输出
0x10=0001 0000 为什么会是通用推挽输出?MODEy和CNFy一共只有4位2进制数为什么这里有8位?我只知道通用推挽输出是设置CNFy为00,哪两个0是设置它的?其他几位是干嘛的?
再比如GPIO_Mode_IPD=0x28,  0010 1000 是下拉输入        GPIO_Mode_IPU=0x48  0100 1000  是上拉输入  是不是后四位10是CNFy中的上拉/下拉输入模式,00是MODEy中的输入模式?那前四位是什么?


 

最佳答案

查看完整内容[请看2#楼]

这个要看函数GPIO_Init的定义 GPIO_Mode_Out_PP=0x10  这个并不直接对应寄存器 /*---------------------------- GPIO Mode Configuration -----------------------*/   currentmode = ((uint32_t)GPIO_InitStruct->GPIO_Mode) & ((uint32_t)0x0F);   if ((((uint32_t)GPIO_InitStruct->GPIO_Mode) & ((uint32_t)0x10))&nbs ...
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

0

主题

43

帖子

0

精华

初级会员

Rank: 2

积分
163
金钱
163
注册时间
2014-11-13
在线时间
28 小时
发表于 2014-12-15 17:35:09 | 显示全部楼层
这个要看函数GPIO_Init的定义
GPIO_Mode_Out_PP=0x10  这个并不直接对应寄存器
/*---------------------------- GPIO Mode Configuration -----------------------*/
  currentmode = ((uint32_t)GPIO_InitStruct->GPIO_Mode) & ((uint32_t)0x0F);
  if ((((uint32_t)GPIO_InitStruct->GPIO_Mode) & ((uint32_t)0x10)) != 0x00)
  { 
    /* Check the parameters */
    assert_param(IS_GPIO_SPEED(GPIO_InitStruct->GPIO_Speed));
    /* Output mode */
    currentmode |= (uint32_t)GPIO_InitStruct->GPIO_Speed;
从这段代码可以看出,第4位的1确定了是作为输出,然后把GPIO_Speed写入低2位
比如开漏输出是0x14,0100里的01就对应寄存器里的CNF
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-28 00:31

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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