5月5日学习收获

波特率:单片机或计算机在串口通信时的速率,指信号被调制后在单位时间内的变化,即单位时间内载波参数变化的次数,如每秒钟传送240个字符,而每个字符格式包含10位(1个起始位,1个停止位,8个数据位),这时的波特率为240Bd,比特率为10位×240个/秒=2400bps。
delay函数:在C语言中,该函数一般是自己定义的一个延时函数。
GPIO(General Purpose Input Output):通用输入输出,另称总线扩展器,是利用工业标准I2C、SMBus或SPI接口简化了的I/O口,简而言之,就是每个GPIO端口可通过软件进行配置,决定其是输入还是输出端口。
GPIO库:
gpio管脚:一个io管脚,这个管脚可以有多个配置。在库函数中用GPIO_PIN_1这样的宏定义表示。
gpio端口:在库函数中用宏定义GPIOA、GPIOB等表示。
1、gpio库说明
库文件名:stn32f4xx_gpio.c
使用该驱动的方法:
(1)使用RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOx,ENABLE)函数使能gpio的AHB总线时钟。
(2)使用GPIO_Init()函数对每个引脚进行四种可能的配置:
《1》输入状态:Floating(浮空)、Pull-up(上拉)、Pull-down(下拉)
《2》输出状态:Push-Pull(上拉下拉)(Pull-up(上拉)、Pull-down(下拉)or no Pull(不上拉也不下拉)),Open Drain(开漏)(Pull-up(上拉)、Pull-down(下拉)or no Pull(不上拉也不下拉)),配置速度为2MHz,25MHz,50MHz和100MHz。
《3》第二功能:上拉下拉和开漏
《4》模拟:当一个管脚被用作ADC通道或者DAC输出的时候,需要配置成此模式
(3)外设的第二功能:
《1》在ADC和DAC模式,使用GPIO_InitStruct→GPIO_Mode=GPIO_Mode_AN把需要的管脚配置成模拟模式。
《2》对于其它的管脚(定时器,串口等):
使用GPIO_PinAFConfig()函数把管脚和需要的第二功能进行连接
使用GPIO_InitStruct→GPIO_Mode=GPIO_Mode_AF把需要的管脚配置成第二功能模式
通过成员变量GPIO_PuPd,GPIO_OType and GPIO_Speed选择类型,上拉下拉和输出速度
调用函数GPIO_Init()
(4)在输入模式,用函数GPIO_ReadInputDataBit()得到配置好管脚的电平
(5)在输出模式,用函数GPIO_SetBits()/GPIO_ResetBits()设置配置好IO的高低电平
(6)在复位过程和刚刚复位后,第二功能是无效的,GPIO被配置成了输入浮空模式(JTAG管脚除外)
(7)当LSE振荡器关闭的时候,LSE振荡器管脚OSC32_IN和OSC32_OUT可以作为通过IO来使用(分别用PC14和PC15表示)。LSE的优先级高于GPIO函数
(8)当HSE振荡器关闭的时候,HSE振荡器管脚OSC_IN和OSC_OUT可以作为通用IO(PH0,PH1)来使用。HSE的优先级高于GPIO函数。
2 具体函数说明
初始化和配置相关函数
(1)void GPIO_DeInit(GPIO_TypeDef* GPIOx)
函数解释:gpio的反初始化函数,该函数的作用是把GPIO相关的寄存器配置成上电复位后的默认状态,在第一次初始化前或者不再使用某一个接口后可以调用该函数。
函数参数说明:GPIOx:gpio的分组,如GPIOA GPIOB GPIOC等的宏定义(这些宏定义在头文件stm32f4xx.h中,由厂家写好,我们直接使用即可)
(2)void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef*GPIO_InitStruct)
函数解释:gpio的初始化函数,该函数的作用是对io进行初始化。
函数参数说明:(1)GPIOx:gpio的分组,如GPIOA GPIOB GPIOC等的宏定义。
(2)GPIO_InitStruct:gpio的初始化相关结构体。该结构体里面的成员变量决定了我们具体的初始化参数。以下进行说明:
GPIO_Pin:指定具体的IO脚,如GPIO_Pin_0 GPIO_Pin_1这样的宏定义,这些宏由厂家写好,我们直接使用即可。
GPIO_Mode:指定gpio的模式,有以下四种模式:
GPIO_Mode_IN(输入),GPIO_Mode_OUT(输出),GPIO_Mode_AF(第二功能),GPIO_Mode_AN(模拟),可以直接使用这四种宏定义。
GPIO_Speed:指定IO的最快翻转速度,也就是当使用IO产生频率(如PWM)的最快速度。有以下四种速度的配置:
GPIO_Low_Speed (低速),GPIO_Medium_Speed(中等速度),GPIO_Fast_Speed(快速),GPIO_High_Speed(高速),可以直接使用这四种宏定义。
GPIO_OType:指定选择管脚的输出类型,有以下两种配置:
GPIO_OType_PP (推挽方式输出),GPIO_OType_OD(开漏方式输出),可以直接使用这两种宏定义。
Tips:
推挽输出:推挽输出就是单片机引脚可以直接输出高电平电压。低电平时接地,高电平时输出单片机电源电压。这种方式可以不接上拉电阻。但如果输出端可能会接地的话,这个时候输出高电平可能引发单片机运行不稳定,甚至可能烧坏引脚。推挽方式的驱动力更大。
开漏输出:开漏输出就是不输出电压,低电平时接地,高电平时不接地。如果外接上拉电阻,则在输出高电平时电压会拉到上拉电阻的电源电压。这种方式适合在连接的外设电压比单片机电压低的时候。
GPIO_PuPd。指定选择管脚的上拉和下拉模式。有如下三种配置:
GPIO_PuPd_NOPULL(不上拉也不下拉),GPIO_PuPd_UP(上拉),GPIO_PuPd_DOWN(下拉)。Tips:这些都是IO的内部上拉或者下拉模式,也可以接上拉和下拉电阻通过硬件进行外部上拉和外部下拉。
3 void GPIO_StructInit(GPIO_InitTypeDef* GPIO_InitStruct)
函数解释:gpio结构体的初始化。对GPIO_InitStruct结构体进行默认配置
函数参数说明:GPIO_InitStruct,直接传入该结构体的指针,在该函数内会对结构体进行初始化。

4 void GPIO_PinLockConfig(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
函数解释:锁定gpio的寄存器,锁定的寄存器是GPIOx_MODER,GPIOx_OTYPER, GPIOx_OSPEEDR,GPIOx_PUPDR, GPIOx_AFRL and GPIOx_AFRH。在下一次复位前,被锁定的管脚不能被修改。
函数参数说明:GPIOx:gpio的分组(如GPIOA,GPIOB等)。GPIO_Pin:具体的gpio管脚(如GPIO_Pin_0 GPIO_Pin_1这样的宏定义)
GPIO的读写函数
1. uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_tGPIO_Pin)
函数解释:读取io输入管脚的值
函数参数说明:GPIOx:gpio的分组/gpio端口;GPIO_Pin:具体的gpio管脚
函数返回值说明:输入管脚的值Bit_SET(高电平) Bit_RESET(低电平)

2. uint16_t GPIO_ReadInputData(GPIO_TypeDef* GPIOx)
函数解释:读取输入io数据,该函数用于读取一个IO分组的所有数据
函数参数说明:GPIOx:gpio的分组/gpio端口
函数返回值说明:一个io端口的所有数据 (输入状态)

3. uint8_t GPIO_ReadOutputDataBit(GPIO_TypeDef* GPIOx, uint16_tGPIO_Pin)
函数解释:读取io输出管脚的值
函数参数说明:GPIOx:gpio的分组/gpio端口;GPIO_Pin:具体的gpio管脚
函数返回值说明:输出管脚的值Bit_SET(高电平) Bit_RESET(低电平)

4. uint16_t GPIO_ReadOutputData(GPIO_TypeDef* GPIOx)
函数解释:读取输出io分组/端口的值
函数参数说明:GPIOx:gpio的分组/gpio端口
函数返回值说明:一个io端口的所有数据 (输出状态)

5. void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
函数解释:对io管脚进行置位(输出高电平)。这个函数使用GPIOx_BSRR寄存器来实现原子读或者修改操作。在这种情况下,在读和修改访问时发生一个IRQ中断是没有危险的。
函数参数说明:GPIOx:gpio的分组/gpio端口;GPIO_Pin:具体的gpio管脚或者是io管脚的组合

6. void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
函数解释:对io管脚进行复位(输出低电平)。这个函数使用GPIOx_BSRR寄存器来实现原子读或者修改操作。在这种情况下,在读和修改访问时发生一个IRQ中断是没有危险的。
函数参数说明:GPIOx:gpio的分组/gpio端口;GPIO_Pin:具体的gpio管脚或者是io管脚的组合

7. void GPIO_WriteBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, BitActionBitVal)
函数解释:对某一位进行写入操作
函数参数说明:GPIOx:gpio的分组/gpio端口;GPIO_Pin:具体的gpio管脚;BitVal:写入高电平或者低电平(Bit_RESET:写入低电平 Bit_SET:写入高电平)

8. void GPIO_Write(GPIO_TypeDef* GPIOx, uint16_t PortVal)
函数解释:对gpio端口进行写入操作,适用于对统一端口的多个管脚的写入
函数参数说明:GPIOx:gpio的分组/gpio端口; BitVal:写入高电平或者低电平(Bit_RESET:写入低电平 Bit_SET:写入高电平)

9. void GPIO_ToggleBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
函数解释:翻转指定的gpio口,也就是说,如果当前的io是低电平,则变成高电平,如果当前io是高电平,则变成低电平
函数参数说明:GPIOx:gpio的分组/gpio端口;GPIO_Pin:具体的gpio管脚
Gpio复用功能配置函数
1. void GPIO_PinAFConfig(GPIO_TypeDef* GPIOx, uint16_t GPIO_PinSource,uint8_t GPIO_AF)
函数解释:改变指定管脚的映射关系。即配置指定管脚的复用功能。
函数参数说明:GPIOx:gpio的分组/gpio端口;GPIO_PinSource:具体要配置成复用功能的管脚(如GPIO_Pin_0 GPIO_Pin_1这样的宏定义);GPIO_AF:选择该管脚要使用的复用功能。有如下配置:(注意:复用功能的配置要和实际管脚支持的复用功能匹配)
GPIO_AF_RTC_50Hz: Connect RTC_50Hz pin toAF0 (default after reset)
GPIO_AF_MCO: Connect MCO pin (MCO1 and MCO2)to AF0 (default after reset)
GPIO_AF_TAMPER: Connect TAMPER pins(TAMPER_1 and TAMPER_2) to AF0 (default after reset)
GPIO_AF_SWJ: Connect SWJ pins (SWD andJTAG)to AF0 (default after reset)
GPIO_AF_TRACE: Connect TRACE pins to AF0(default after reset)
GPIO_AF_TIM1: Connect TIM1 pins to AF1
GPIO_AF_TIM2: Connect TIM2 pins to AF1
GPIO_AF_TIM3: Connect TIM3 pins to AF2
GPIO_AF_TIM4: Connect TIM4 pins to AF2
GPIO_AF_TIM5: Connect TIM5 pins to AF2
GPIO_AF_TIM8: Connect TIM8 pins to AF3
GPIO_AF_TIM9: Connect TIM9 pins to AF3
GPIO_AF_TIM10: Connect TIM10 pins to AF3
GPIO_AF_TIM11: Connect TIM11 pins to AF3
GPIO_AF_I2C1: Connect I2C1 pins to AF4
GPIO_AF_I2C2: Connect I2C2 pins to AF4
GPIO_AF_I2C3: Connect I2C3 pins to AF4
GPIO_AF_SPI1: Connect SPI1 pins to AF5
GPIO_AF_SPI2: Connect SPI2/I2S2 pins to AF5
GPIO_AF_SPI4: Connect SPI4 pins to AF5
GPIO_AF_SPI5: Connect SPI5 pins to AF5
GPIO_AF_SPI6: Connect SPI6 pins to AF5
GPIO_AF_SAI1: Connect SAI1 pins to AF6 forSTM32F42xxx/43xxx devices.
GPIO_AF_SPI3: Connect SPI3/I2S3 pins to AF6
GPIO_AF_I2S3ext: Connect I2S3ext pins toAF7
GPIO_AF_USART1: Connect USART1 pins to AF7
GPIO_AF_USART2: Connect USART2 pins to AF7
GPIO_AF_USART3: Connect USART3 pins to AF7
GPIO_AF_UART4: Connect UART4 pins to AF8
GPIO_AF_UART5: Connect UART5 pins to AF8
GPIO_AF_USART6: Connect USART6 pins to AF8
GPIO_AF_UART7: Connect UART7 pins to AF8
GPIO_AF_UART8: Connect UART8 pins to AF8
GPIO_AF_CAN1: Connect CAN1 pins to AF9
GPIO_AF_CAN2: Connect CAN2 pins to AF9
GPIO_AF_TIM12: Connect TIM12 pins to AF9
GPIO_AF_TIM13: Connect TIM13 pins to AF9
GPIO_AF_TIM14: Connect TIM14 pins to AF9
GPIO_AF_OTG_FS: Connect OTG_FS pins to AF10
GPIO_AF_OTG_HS: Connect OTG_HS pins to AF10
GPIO_AF_ETH: Connect ETHERNET pins to AF11
GPIO_AF_FSMC: Connect FSMC pins to AF12
GPIO_AF_FMC: Connect FMC pins to AF12 forSTM32F42xxx/43xxx devices.
GPIO_AF_OTG_HS_FS: Connect OTG HS(configured in FS) pins to AF12
GPIO_AF_SDIO: Connect SDIO pins to AF12
GPIO_AF_DCMI: Connect DCMI pins to AF13
GPIO_AF_LTDC: Connect LTDC pins to AF14 forSTM32F429xx/439xx devices.
GPIO_AF_EVENTOUT: Connect EVENTOUT pins toAF15

上拉电阻与下拉电阻:
1、上拉电阻与下拉电阻用在什么场合?
答:用在数字电路中,存在高低电平的场合。
2、上拉电阻与下拉电阻怎么接线?
答:上拉电阻:电阻一端接VCC,一端接逻辑电平接入引脚(如单片机引脚)

下拉电阻:电阻一端接GND,一端接逻辑电平接入引脚(如单片机引脚)

3、上拉电阻和下拉电阻有什么用?
答:提高驱动能力:
例如,用单片机输出高电平,但由于后续电路的影响,输出的高电平不高,就是达不到VCC,影响电路工作。所以要接上拉电阻。下拉电阻情况相反,让单片机引脚输出低电平,结果由于后续电路影响输出的低电平达不到GND,所以接个下拉电阻。
在单片机引脚电平不定的时候,让后面有一个稳定的电平:
例如上面接下拉电阻的情况下,在单片机刚上电的时候,电平是不定的,还有就是如果你连接的单片机在上电以后,单片机引脚是输入引脚而不是输出引脚,那这时候的单片机电平也是不定的,R18的作用就是如果前面的单片机引脚电平不定的话,强制让电平保持在低电平。
如果IE_DATA那个地方,不连接任何引脚,那么由于R18的下拉作用,IE_DATA就是低电平,所以三极管就不会导通。

时间: 2024-10-06 05:50:21

5月5日学习收获的相关文章

5月1日学习收获

PWM--脉冲宽度调制逆变电路--将直流信号转变为交流信号采样控制理论有个重要结论:冲量相等而形状不同的窄脉冲加在具有惯性的环节上时,其效果基本相同.PWM基本原理:一般情况下,将信号分解成多个连续的宽度相等,幅值不等的脉冲信号,而PWM则是将这一个个脉冲信号转变成幅值相等,宽度不等的连续信号,得到一组脉冲序列,就是PWM波形.这组信号与原来的脉冲信号的冲量是相等的,即每一个PWM信号与原来的脉冲信号的面积是相等的.对副半周信号同样可以用PWM.notepad++打开文件:视图→工程→工程面板→

5月3日学习收获

keil uvision4 破解:MDK412安装包→一路next→安装好了之后,用管理员模式打开软件→File→License Management→Computer ID→复制CID→keillic.exe→粘贴CID→Target选为ARM→Generate→复制生成的一串注册码→粘贴New License ID Code→Add LIC→激活成功. 主语从句与强调句的区别:强调句去掉it is that后句子仍然成立,而主语从句不能.

2016年7月19日学习笔记

2016年7月19日学习笔记 计算机系统的组成部分 计算机系统由硬件系统和软件系统两大部分组成 硬件系统 冯.诺依曼体系结构: 1946年数学家冯.诺依曼提出运算器,控制器,存储器,输入设备,输出设备. 具体变现为一下硬件: 运算器,控制器  ------>  CPU 存储器          ------>  内存(断电数据清空),硬盘(可永久存储数据) 输入设备------>  键盘,鼠标等 输出设备------>  显示器 打印机等 软件系统 OS : Operating S

2014年7月17日学习笔记--PHP的循环结构学习

今天重新开始学习PHP, 为了学习PHP买了书,但书是一本大部头的书,不好带一直没有好好学习,我决定把书拆了分章来看,这样也方便带 也可以很快完成任务. 今天在linux mint 17上安装了lnmp 环境 和brackets工具,来学PHP,小的例子用vim来完成的. 记录一下自己美化的九九乘法表 代码如下: <?php     for($i=1;$i<=9;$i++){         for($j=1;$j<=9;$j++){             if($i>=$j){

2017年8月9日学习内容存放 #socket通信介绍

2017年8月9日学习内容存放 1 #socket通信介绍 2 3 ''' 4 OSI七层 5 6 应用 7 表示 8 会话 9 传输 10 网络 ip 11 数据链路 mac 12 物理层 网线 13 14 15 16 http 17 smtp 18 dns 19 ftp 20 ssh 21 snmp 22 icmp ping 23 dhcp 24 25 26 27 发 send 28 收 receive 29 30 31 32 33 TCP/IP 三次握手,四次断开 34 35 UDP 36

2016年7月21日学习笔记

2016年7月21日学习笔记 Linux安装以后出现的文件目录的作用: 文件系统的类型 LINUX有四种基本文件系统类型:普通文件.目录文件.连接文件和特殊文件,可用file命令来识别. 普通文件:如文本文件.C语言元代码.SHELL脚本.二进制的可执行文件等,可用cat.less.more.vi.emacs来察看内容,用mv来改名. 目录文件:包括文件名.子目录名及其指针.它是LINUX储存文件名的唯一地方,可用ls列出目录文件. 连接文件:是指向同一索引节点的那些目录条目.用ls来查看是,连

4月24日学习日志

2017年4月24日上午看了张宇数学18讲第四讲一元函数微分学的几何应用的知识点,复习昨天的英语单词 . 下午学习张宇数学18讲第四讲一元函数微分学的例题,完成考研英语单词的记忆,以及学会该单词的多种词意,词组和例句.

5月5日学习心得

拖延了一个多月的Essential C++的学习终于在自己的强迫之下开始了,之前虽然阅读了书的第一章内容,印象仍旧是表层,没能深入到程序的构造当中. 今天下午开始敲课后习题,没有能够自己写出来,就对着答案敲,可喜的是自己还是有一点笨鸟多做的觉悟,把答案里自己不懂得都想办法翻书,百度,或者是问学长学姐以求解答.不论以前如何,今天下午自己的表现,我还是相当满意的. 不仅仅因为我自己发现了vector元素录入的问题和在具体执行当中怎样操作才能使得程序终止输入,进行输出的棘手难度,而且更因为我自己百度了

9月7日学习日志

今天早晨的时间在做网易云课堂<Web全栈工程师课程>第6节的习题.最终照着答案修改了一遍.semantic ui不是很会用,基础太差了.总之有点打击,并且让我意识到自己最大的问题在于基础的不足.这几天的学习确实有浮躁之气,多看视频少练习了.我觉得是我学习方法出问题了,视频毕竟不能当做主要的学习渠道.主要是因为视频里面讲的内容都是高度浓缩的精华,一个基础知识非常差的我看视频不仅学习效率不可观,而且花费的时间也比正常的学习顺序要多.--在这一块有点纠结:我是能看懂视频的里面的内容的(我怀疑只是我以