背景

指导学弟毕设,因为开发板型号不同(一个是ZET6,一个是C8T6),所以例程上面的DATA口所插的PG11口在他的板子上面找不到,改了半天程序,一直显示检测不到DHT11,很是恼火。
经过差不多两个小时的查看与寻找资料,终于发现问题了,问题其实不难发现,但是初学者如果没有遇到过,就很容易忽视。

正常的修改

正常情况下,如果要修改引脚,到相应的.c或.h扫一眼就行了,比如这次要把PG11改成PA1,但凡发现GPIOG全都改成GPIOA,发现pin_11,全部改成pin_1,基本上都能OK,我也是这样,首先修改.c:

u8 DHT11_Init(void)
{    GPIO_InitTypeDef  GPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOG, ENABLE);  //使能PG端口时钟GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;               //11改成1GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;        //推挽输出GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOG, &GPIO_InitStructure);              //G改成AGPIO_SetBits(GPIOG,GPIO_Pin_11);                      //G改成A,11改成1                DHT11_Rst();  //复位DHT11return DHT11_Check();//等待DHT11的回应
}

再修改.h:

#define  DHT11_DQ_OUT PGout(11) //G改成A,11改成1
#define DHT11_DQ_IN  PGin(11)  //G改成A,11改成1

然后编译、下载,全程都没有错误,但是下载以后总是无法运行,在初始化DHT11的时候就不行。

容易忽视的点

想了很久,又看了别人的文件,发现.h里面还有两行:

#define DHT11_IO_IN()  {GPIOG->CRH&=0XFFFF0FFF;GPIOG->CRH|=8<<12;}
#define DHT11_IO_OUT() {GPIOG->CRH&=0XFFFF0FFF;GPIOG->CRH|=3<<12;}

也是跟G有关的,将里面所有的G全部改成A以后,还是不行。。。
上网找关于CRH的资料:

STM32的CRL控制着个IO端口(A~G)的低8位(即0~7,同理 高八位是8~15)的模式。每个IO端口的位占用CRL的4个位,高两位为CNF,低两位为MODE。这里我们可以记住几个常用的配置,比如0X4表示模拟输入模式(ADC用)、0X3表示推挽输出模式(做输出口用,50M速率)、0X8表示上/下拉输入模式(做输入口用)、0XB表示复用输出(使用IO口的第二功能,50M速率)。
CRH的作用和CRL完全一样,只是CRL控制的是低8位输出口,而CRH控制的是高8位输出口。

恍然大悟,上面第一行的代码意思是先将相应位置清零,再打上8,也就是输入,最后的12是3个4位,高位从8开始,<<12指向的就是PG8口,第二行的意思是:先将相应位置清零,再打上3,也就是推挽输出
所以,上述代码修改为:

#define DHT11_IO_IN()  {GPIOA->CRL&=0XFFFFFF0F;GPIOA->CRL|=8<<4;}
#define DHT11_IO_OUT() {GPIOA->CRL&=0XFFFFFF0F;GPIOA->CRL|=3<<4;}

改动的地方有:G口改为A口,CRH改为CRL(因为之前的11属于高位,这里的1属于地位),0XFFFF0FFF改为0XFFFFFF0F,最后的12改成4.

测试一下,成功。

DHT11修改stm32引脚的笔记相关推荐

  1. stm32 u8g2移植笔记

    STM32 u8g2 移植笔记 前言 当初想写一个单色屏菜单时,曾移植过u8g2到STM32平台(这里用的是keil MDK),不过当时一直有一个问题没有搞懂:为什么u8g2用在flash为32k,r ...

  2. STM32 FSMC学习笔记+补充(LCD的FSMC配置)

    STM32 FSMC学习笔记+补充(LCD的FSMC配置) STM32 FSMC学习笔记 STM32 FSMC的用法--LCD 转载于:https://www.cnblogs.com/LittleTi ...

  3. Samba平台搭建和用户自行修改密码环境搭建笔记

    Samba 平台搭建和用户自行修改密码环境搭建笔记 系统:CentOS  release  6.5 (Final)x86_64 软件: samba                   #服务端 sam ...

  4. python pandas修改列名,Python_Pandas学习笔记02:DataFrame获取列名和修改列名

    Python_Pandas学习笔记02:DataFrame获取列名和修改列名 Python_Pandas学习笔记02:DataFrame获取列名和修改列名 一.参考资料 [1].?Pandas获取列名 ...

  5. stm32笔记05——stm32引脚功能分布

    参考资料:  <---------------------------------------------------------------------> 1.STM32F103x8 / ...

  6. stm32阶段总结笔记一

    第一阶段总结笔记,主要对GPIO,串口,时钟,中断,定时器进行总结,方便后续写程序快速查阅,寄存器用来了解库函数具体怎么配置的 文章目录 一.GPIO 寄存器 库函数操作 二.中断 外部中断 寄存器 ...

  7. STM32单片机学习笔记(七)-RCC时钟控制:简单了解时钟树(一)

    写在前面:本系列内容均为自学笔记,参考资料为野火指南者开发板资料及芯片参考手册等,使用野火指南者开发板进行学习,该系列内容仅用于记录笔记,不做其他用途,笔记的内容可能会存在不准确或者错误等,如有大佬看 ...

  8. STM32单片机学习笔记

    1.  AHB系统总线分为APB1(36MHz)和APB2(72MHz),其中2>1,意思是APB2接高速设备 2.  Stm32f10x.h相当于reg52.h(里面有基本的位操作定义),另一 ...

  9. stm32中断源有哪些_143条 超详细整理STM32单片机学习笔记(必看)

    点击上方蓝色字关注我们~ 1.AHB系统总线分为APB1(36MHz)和APB2(72MHz),其中2>1,意思是APB2接高速设备 2.Stm32f10x.h相当于reg52.h(里面有基本的 ...

  10. 【初篇】DHT11连接STM32、One wire单总线原理、GPIO代码详解

    目录 一.DHT11单总线原理 二.代码详解 三.代码 代码见文章末尾 一.DHT11单总线原理 DHT11温湿度传感器只需要一根线即可和MCU进行数据交换,无数据传输时,单线应为高电平状态,具体流程 ...

最新文章

  1. 基于虚拟帐号的邮件系统(extmail)上
  2. java MDC_log4j MDC实现日志追踪
  3. 多媒体查询(一招教会你写响应页面!!!)
  4. anguarjs 上传图片预览_设计神器!图片批量压缩、格式转换、调整尺寸的在线工具...
  5. C++ Lists(链表)
  6. cocos2d-x中使用Http
  7. C++利用栈实现计算器
  8. 关于编写过程中进制之间的转换
  9. 苹果鸠占鹊巢打败微软 纳德拉欲以其人之道还治其身
  10. 简单线性相关案例-求相关系数
  11. 阳明心学在敏捷开发中的应用
  12. 如何将图片格式转换为ico格式?
  13. win10隐藏任务栏_win10系统任务栏彰显个性的设置方法
  14. 正则匹配替换最后一位字符
  15. MFC如何调用Flash控件
  16. 360个人图书馆 轻松解除网页防复制
  17. 《克隆人的进攻》面向对象Java版
  18. process java 用法_java Process在windows的使用汇总(转)
  19. Hallucination in NLP(自然语言处理中的幻觉现象)
  20. 细粒度图像分类研究综述

热门文章

  1. soul软件的简单分析
  2. wifi android kernel,android wifi 驱动框架简介
  3. 【已解决】微星主板开启msi fast boot后不能进BIOS
  4. 扑克牌发牌游戏python_Python随机扑克牌生成器游戏
  5. 【Java工具类】(27)—AES加密工具类
  6. 算法导论学习笔记12_动态规划
  7. web border属性
  8. 2021/4/27 “如何为div层添加边框?”(border属性详解)
  9. HTML网页设计制作大作业 html+css+js萌宠之家 网页设计与实现
  10. H5页面设计器,仿有赞商城页面在线设计器,比富文本框更友好的内容编辑器...