DHT11修改stm32引脚的笔记
背景
指导学弟毕设,因为开发板型号不同(一个是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引脚的笔记相关推荐
- stm32 u8g2移植笔记
STM32 u8g2 移植笔记 前言 当初想写一个单色屏菜单时,曾移植过u8g2到STM32平台(这里用的是keil MDK),不过当时一直有一个问题没有搞懂:为什么u8g2用在flash为32k,r ...
- STM32 FSMC学习笔记+补充(LCD的FSMC配置)
STM32 FSMC学习笔记+补充(LCD的FSMC配置) STM32 FSMC学习笔记 STM32 FSMC的用法--LCD 转载于:https://www.cnblogs.com/LittleTi ...
- Samba平台搭建和用户自行修改密码环境搭建笔记
Samba 平台搭建和用户自行修改密码环境搭建笔记 系统:CentOS release 6.5 (Final)x86_64 软件: samba #服务端 sam ...
- python pandas修改列名,Python_Pandas学习笔记02:DataFrame获取列名和修改列名
Python_Pandas学习笔记02:DataFrame获取列名和修改列名 Python_Pandas学习笔记02:DataFrame获取列名和修改列名 一.参考资料 [1].?Pandas获取列名 ...
- stm32笔记05——stm32引脚功能分布
参考资料: <---------------------------------------------------------------------> 1.STM32F103x8 / ...
- stm32阶段总结笔记一
第一阶段总结笔记,主要对GPIO,串口,时钟,中断,定时器进行总结,方便后续写程序快速查阅,寄存器用来了解库函数具体怎么配置的 文章目录 一.GPIO 寄存器 库函数操作 二.中断 外部中断 寄存器 ...
- STM32单片机学习笔记(七)-RCC时钟控制:简单了解时钟树(一)
写在前面:本系列内容均为自学笔记,参考资料为野火指南者开发板资料及芯片参考手册等,使用野火指南者开发板进行学习,该系列内容仅用于记录笔记,不做其他用途,笔记的内容可能会存在不准确或者错误等,如有大佬看 ...
- STM32单片机学习笔记
1. AHB系统总线分为APB1(36MHz)和APB2(72MHz),其中2>1,意思是APB2接高速设备 2. Stm32f10x.h相当于reg52.h(里面有基本的位操作定义),另一 ...
- stm32中断源有哪些_143条 超详细整理STM32单片机学习笔记(必看)
点击上方蓝色字关注我们~ 1.AHB系统总线分为APB1(36MHz)和APB2(72MHz),其中2>1,意思是APB2接高速设备 2.Stm32f10x.h相当于reg52.h(里面有基本的 ...
- 【初篇】DHT11连接STM32、One wire单总线原理、GPIO代码详解
目录 一.DHT11单总线原理 二.代码详解 三.代码 代码见文章末尾 一.DHT11单总线原理 DHT11温湿度传感器只需要一根线即可和MCU进行数据交换,无数据传输时,单线应为高电平状态,具体流程 ...
最新文章
- 基于虚拟帐号的邮件系统(extmail)上
- java MDC_log4j MDC实现日志追踪
- 多媒体查询(一招教会你写响应页面!!!)
- anguarjs 上传图片预览_设计神器!图片批量压缩、格式转换、调整尺寸的在线工具...
- C++ Lists(链表)
- cocos2d-x中使用Http
- C++利用栈实现计算器
- 关于编写过程中进制之间的转换
- 苹果鸠占鹊巢打败微软 纳德拉欲以其人之道还治其身
- 简单线性相关案例-求相关系数
- 阳明心学在敏捷开发中的应用
- 如何将图片格式转换为ico格式?
- win10隐藏任务栏_win10系统任务栏彰显个性的设置方法
- 正则匹配替换最后一位字符
- MFC如何调用Flash控件
- 360个人图书馆 轻松解除网页防复制
- 《克隆人的进攻》面向对象Java版
- process java 用法_java Process在windows的使用汇总(转)
- Hallucination in NLP(自然语言处理中的幻觉现象)
- 细粒度图像分类研究综述
热门文章
- soul软件的简单分析
- wifi android kernel,android wifi 驱动框架简介
- 【已解决】微星主板开启msi fast boot后不能进BIOS
- 扑克牌发牌游戏python_Python随机扑克牌生成器游戏
- 【Java工具类】(27)—AES加密工具类
- 算法导论学习笔记12_动态规划
- web border属性
- 2021/4/27 “如何为div层添加边框?”(border属性详解)
- HTML网页设计制作大作业 html+css+js萌宠之家 网页设计与实现
- H5页面设计器,仿有赞商城页面在线设计器,比富文本框更友好的内容编辑器...