版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、一、GPIO 口的配置STM32的DGPIO 口最多可以有 7组(GPIOaGPIOg ),而每一组 GPIO 口均有16个 双向IO组成。并且没个IO 口均可配置成8种模式(4种输入模式,4种输出模式)。不管 配置哪个IO 口也不论将其配置成哪种模式(但是配置成哪种模式要看具体应用,参考中 文参考手册第105页)都可以按以下步骤来进行配置:(1)使能 PORTx(x=AG )时钟这里就得操作寄存器 RCC_APB2ENR ( 32为寄存器)了15141312111098ADC3ENUSART1ENTIM8ENSPI1ENTIM1ENADC2ENADC1ENIOPGEN 彳76543210IO
2、PFENOPEENOPDENIOPCENIOPBENIOPAEN保留AFIOENRCC_APB2ENR 的 015 位(0632 位保留)第28分别是使能GPIOAGPIOG时钟的,只要将其置“ 1 ”即可,如RCC_APB2ENR|=1CRL&=0XFFFFF0FF ; GPIOD-CRL|=OXOOOOO3OO ; /PD.2 推挽输出;其余 IO 口的 低8位以此类推。3130292827262524CNF151:0MODE151:0CNF141:0MODE141:02322212019181716CNF131:0MODE131:0CNF121:0MODE121:015141312111
3、098CNF111:0MODE111:0CNF101:0MODE101:07T 6543210CNF91:0MODE91:0CNF81:0MODE81:0GPIOx_CRH(端口配置高寄存器 x=AE)该寄存器用于配置 GPIOx的高8位,具体8种模式的配置见中文参考手册例如:GPIOA-CRH&=0XFFFFFFF0; ; GPIOA-CRH|=OXOOOOOOO3 ; /PA8 推挽输出;其余 IO 口 的高8位以此类推。(3)端口的输入和输出电平配置15141312111098DR15IDR14IDR13IDR12IDR11IDR10IDR9IDR876543210DR7IDR6IDR5
4、IDR4IDR3IDR2IDR1IDR0GPIOx_IDR (端口输入数据寄存器 x=AE) 该寄存器配置IO 口的015位的输入数据,以16位读出。15141312111098 ODR15ODR14ODR13ODR12ODR11ODR10ODR9ODR876543210ODR7ODR6ODR5ODR4ODR3ODR2ODR1ODR0GPIOx_ODR (端口输出数据寄存器 x=AE)该寄存器配置IO 口的015位的输入初始状态,例如:GPIOA-ODR|=1APB2ENR|=1CRL&=0XFFFFFFF0;/PA0设置成输入GPIOA-CRL|=OXOOOOOOO8;GPIOA-CR H&
5、=0X0F0FFFFF;/PA13,15 设置成输入GPIOA-CRH|=0X80800000;GPIOA-ODR|=1ODR|=1APB2ENR|=1APB2ENR|=1CRH &=0XFFFFFFF0;GPIOA-CRH|=OXOOOOOOO3;/PA8 推挽输出GPIOA-ODR|=1CRL&=0XFFFFF0FF;GPIOD-CRL|=OXOOOOO3OO;/PD.2 推挽输出GPIOD-ODR|=12;/PD.2 输出高二、串口通信STM32最多可以提供5路串口,其串口配置主要有以下步骤: (1)串口时钟使能15141312111098ADC3ENUSART1ENTIM8ENSPI1
6、EN :TIM1ENADC2ENADC1ENIOPGEN :76543210IOPFENIOPEENIOPDENIOPCENIOPBENIOPAEN保留AFIOENRCC_APB2ENR 的 015 位(1632 位保留)在寄存器RCC_APB2ENR里的第14位就是对串口 1的时钟使能即:RCC_APB2ENR|=114;使能串口 1时钟,那么除串口 1的时钟使能在 RCC_APB2ENR外其余的时钟使能位在寄存器 RCC APB1ENR里,看下表:3130292827262524保留DACENPWRENBKPEN保留CANEN保留2322212019181716USBENI2C2ENI2C
7、1ENUART5ENUART4ENUART3ENUART2EN保留15141312111098SPI3ENSPI2EN保留WWDGEN保留7654P 3210保留TIM7ENTIM6ENTIM5ENTIM4ENTIM3ENTIM2ENRCC_APB1ENR例如:RCC_APB1ENR|=117; /使能串口 2时钟,其余串口时钟使能以此类推。(2)串口复位即结束复位STM32在使用串口时不管当前该串口出于什么状态都先要将其复位,而复位后要将其 结束复位。串口复位主要在寄存器RCC_APB1RSTR (串口 1的复位)和寄存器RCC_APB2RSTR (其余串口复位)|这两个寄存器如下表1514
8、1312111098ADC3RSTUSART1RST1M8RSTSPI1RSTTIM1RSTADC2RSTADC1RSTIOPGRST76543210IOPFRSTIOPERSTIOPDRSTIOPCRSTIOPBRSTIOPARST保留AFIORSTRCC_APB2RSTR ( APB2外设复位寄存器) 寄存器 RCC_APB2RSTR的第14位是进行串口 1的复位如:RCC_APB1RSTR|=114; /将 串口 1复位,然后结束复位 RCC_APB1RSTR|= ( 114); 结束串口 1复位其余串口复位在寄存器RCC_APB1RSTR里如下表:3130292827262524保留D
9、ACRSTPWRRST :BKPRST保留CANRST保留丁23222120 :19181716USBRSTI2C2RSTI2C1RSTUART5RSIUART4RSUART3RSTJART2RS保留15141312111098SPI3RSTSPI2RST保留WWDGRST保留76543210保留TIM7RSTTIM6RST :TIM5RSTTIM4RSTTIM3RSTTIM2TST :RCC_APB1RSTR (APB1外设复位寄存器)女口: RCC_APB1RSTR|=117; / 复位串口 2RCC_APB1RSTR|=(1CR1|=0X200C;1 位停止,无校验位 0X200C=00
10、10 0000 0000 1100B设置成使能串口 8个字长1个停止位(USART_CR2中13:12默认为“ 0”禁止校验,禁止 校验所有中断,使能发送和接收。(5 )数据发送和接收15141312111098保留DR876543210DR7:0USART_DR(数据寄存器)发送数据缓存寄存器(向它写数据它会自动发送数据),当接收到数据时则存放接收的数据(6 )串口控制15141312111098保留CTSLBD76543210TXETCRXNELDLEORENEFEPEUSART_SR参考程序:void uart_i nit(u32 pclk2,u32 bou nd)float temp;
11、u16 man tissa;u16 fractio n;temp=(float)(pclk2*1000000)/(bound*16); 得到 USARTDIV man tissa=temp;得到整数部分fraction=(temp-mantissa)*16; / 得到小数部分man tissaAPB2ENR|=1APB2ENR|=1CR H&=0XFFFFF00F;GPI0A-CRH|=0X000008B0;/l0 状态设置RCC-APB2RSTR|=1APB2RSTR&=(1BRR=ma ntissa; / 波特率设置USART1-CR1|=0X200C; /1 位停止 ,无校验位 . #i
12、fdef EN_USART1_RX/ 如果使能了接收/使能接收中断USART1-CR1|=1CR1|=1SR&(1DR; if(USART_RX_STA&0x80)=0)/ 接收未完成 if(USART_RX_STA&0x40)/ 接收到了 0x0d if(res!=0x0a)USART_RX_STA=0;/ 接收错误 ,重新开始 else USART_RX_STA|=0x80;/接收完成了else / 还没收到 0X0Dif(res=0x0d)USART_RX_STA|=0x40;else USART_RX_BUFUSART_RX_STA&0X3F=res; USART_RX_STA+;if
13、(USART_RX_STA63)USART_RX_STA=0;/ 接 收数据错误 ,重新开始接收以上两个函数已经封装在 usart.c 中可直接调用三、外部中断STM32的每一个10 口都可以作为中断输入,要想把10 口作为中断输入则必须将10 口设置成上拉/下拉输入或浮空输入(设置成浮空输入时要接上拉或下拉电阻否则可能导致中 断不断触发)。下面总结一下设置10 口为外部中断时的步骤:(1)将10 口设置成输入模式这个在第一章总结过,这里不多说。(2)开启10 口复用时钟,设置10 口与中断线的映射关系这一步在函数 void Ex_NVIC_Co nfig(u8 GPI0x,u8 BITx,u
14、8 TRIM)中已经封装好可直接调用这里说一下10 口的复用时钟使能:15141312111098ADC3ENUSART1ENTIM8ENSPI1ENTIM1ENADC2ENADC1ENIOPGEN :76543210IOPFENIOPEENIOPDENIOPCENIOPBENIOPAEN保留AFIOENRCC_APB2ENRRCC_APB2ENR|=0X01;/使能 10 口复用时钟(3) 开启与该10 口相对应的线上中断/事件,并设置触发条件这一步封装在函数 void Ex_NVIC_Co nfig(u8 GPI0x,u8 BITx,u8 TRIM)中,可以直接调用,例如:Ex_NVIC_
15、Config(GPIO_A,0,RTIR); / 设置 PA(0)上升沿触发Ex_NVIC_Config(GPI0_A,13,FTIR); 设置 PA( 13)下降沿触发(4) 配置中断分组(NVIC )并使能中断这一步封装在函数 void MY_NVIC_I ni t(u8 NVIC_Preemptio nPriority,u8 NVIC_SubPriority,u8 NVIC_Cha nn el,u8 NVIC_Group) 里面可以直接调用,例如:MY_NVIC_Init(2,2,EXTI0_IRQChannel,2);抢占 2,子优先级 2,组 2这里值得注意的是 EXTI0、EXTI
16、1、EXTI2、EXTI3、EXTI4 为 LineOLine4EXTI15_10 为 Line15Line10EXTI9_5 为 Line9Line5(5) 编写中断服务函数例如:void EXTI15_10_IRQHa ndler(void)delay_ms(10);/ 消抖if(KEYO=O)按键 0LED0=!LED0;else if(KEY1=0)/ 按键 1LED1=!LED1;EXTI-PR=1PR=1APB1ENR|=1APB1ENR|=1APB1ENR|=1APB1ENR|=0X01 ; /使能 TIME2 的时钟使能;(RCC-APB1ENR|=1DIER|=1DIER|=
17、1CR1|=0x01;/使能定时器 315141312111098保留CC4OFCC3OFCC2OFCC1OF保留76543210BIFTIFCOMIFCC4IFCC3IFCC2IFCC1IFUIFTIMx_SR该寄存器用来标记当前预定时器相关的各种事件/中断是否发生。UIF :更新中断标记,当产生更新事件时该位由硬件置1。例如:if(TIM3-SR&0X0001)/ 溢出中断(5) TIM3中断分组设置例如:MY_NVIC_Init(1,3,TIM3_IRQChannel,2);抢占 1,子优先级 3,组 2直接调用该函数就行(6) 编写中断服务程序例如:void TIM3_IRQHa nd
18、ler(void)if(TIM3-SR&0X0001)/ 溢出中断LED仁!LED1;TIM3-SR&=(1APB1ENR|=1ARR=arr;/设定计数器自动重装值 刚好1msTIM3-PSC=psc; 预分频器7200,得到10Khz的计数时钟这两个东东要同时设置才可以使用中断TIM3-DIER|=1DIER|=1CR1|=0x01;/使能定时器 3MY_NVIC_Init(1,3,TIM3_IRQChannel,2);抢占 1,子优先级 3,组 2TIME2的CH2模式2的PWM 输出:脉冲宽度调制模式可以产生一个由寄存器TIMx_ARR确定频率和由寄存器TIMx_CCRx确定其占空比的
19、 PWM波形;使能定时器:RCC-APB1ENR|=1CCMR1|=7CCMR1|=111;/使能预装载寄存器使能自动重装载的预装载寄存器:最后还要设置 TIMx_CR1寄存器的ARPE位,(在向 上计数或中心对称模式中)使能自动重装载的预装载寄存器;15141312111098保留CKD1:076543210ARPECMS1:0DIROPMURSUDISCENTIMx_CR1 TIMx_CR1|=1CCER&=0X03;TIM2-CCMR|=1APB1ENR|=1ARR=arr;设定计数器自动重装值 TIM3-PSC=psc;预分频器不分频TIM2-CCMR1|=7CCMR1|=1CR1|=
20、1CR1|=1CCER=0X3303;TIM2-CCER|=1APB1ENR|=1CRL&=0X0FFFFFFF;/PA7 输出GPI0A-CRL|=0XB0000000; 复用功能输出 GPIOA-ODR|=1ARR=arr;/设定计数器自动重装值 TIM3-PSC=psc;/预分频器不分频 TIM3-CCMR1|=7CCMR1|=1CCER|=1CR仁0x8000;/ARPE 使能TIM3-CR1|=0x01;/使能定时器 3其余几个定时器的 PWM输出寄存器配置依次类推。以下例子说明如何在TI1输入的上升沿时捕获计数器的值到TIM1_CCR1寄存器中,步骤如下:1使能TIM1时钟:151
21、41312111098ADC3ENUSART1ENTIM8ENSPI1ENTIM1ENADC2ENADC1ENIOPGEN :76543210IOPFENIOPEENIOPDENIOPCENIOPBENIOPAEN保留AFIOENRCC_APB2ENR 的 015 位(0632 位保留)RCC-APB2ENR|=1CCMR 1 =0X01;/CC1通道选择输入,IC1映射在TI1上3、根据输入信号的特点,配置输入滤波器为所需的带宽(输入为TI1时TIM1_CCMRx寄存器中的ICxF位)。假设输入信号在最多 5个时钟周期的时间内抖动,我们配置滤波器的带长于5个时钟周期。因此我们可以(以 fDT
22、S频率)连续采样8次,已确认在TI1上一次 真实的边沿变换,即在 TIM1 CCMR1寄存器中写入IC仆=0011.15141312111098OC2CEOC2M2:0:OC2PEOC2FE CC2S1:0IC2F3:0IC2PSC1:076543210OC1CEOC1M2:0OC1PE;OC1FEIC1F3:0IC1PSC1:0CC1S1:0TIM1_CCMR1 (捕获/比较模式寄存器1)TIM1-CCMR1|=3CCER&=0CCER|=1DIER|=1DIER|=1APB2ENR|=1APB2ENR|=1CHL&=0XFFFFFFF0;RCC-CHL|=0X00000004;/设置 PA
23、8 为浮空输入TIM1-ARR=arr ;TIM1-PSC=psc ;TIM1-CCMR1=0X01; /CC1 通道选择输入,IC1映射在TI1上TIM1-CCMR1|=3CCER&=0CCER|=1DIER|=1DIER|=1CR1|=1APB2ENR|=1APB2ENR|=1CR1|=0CR1|=1CR1|=1CR1|=1CR1|=0CR1|=1CR1|=1CR1|=7CR1|=0CR1|=1APB2ENR|=1APB2ENR|=1CRL&=0X000FFFFF;GPIOA-CRL|=0XBBB00000;/PA5.6.7 复用GPIOA-ODR|=0X7CR1|=0CR1|=1CR1|
24、=1CR1|=1CR1|=0CR1|=1CR1|=1CR1|=7CR1|=0CR1|=1SR&1SR&1SR&1300) return 0;/若经判断发送缓冲区不为空则返回值“0”SPI-DR=Txdata; /若发送缓冲区为空则发送数据temp=0;while(SPI-SR&1SR&1300) return 0;return SPI-DR;六、DS18B20温度传感器用单片机控制温度传感器 DS18B20进行温度采集主要进行一下步骤:(1) 复位:首先我们必须对DS18B2芯片进行复位,复位就是由控制器(单片机)给DS18B20 单总线至少480uS的低电平信号。当18B20接到此复位信号后
25、则会在 1560uS后回发一个芯片 的存在脉冲。void DS18B20_Rst(void)DS18B20_IO_OUT();讲PAO设置成输出状态DS18B20_DQ_OUT=0;/拉低 DQ( PA0接 DQ)delay_us(750); /拉低 750usDS18B20_DQ_OUT=1; /DQ=1 释放数据线讲 DQ 交给 1820delay_us(15); /15US(2) 存在脉冲:在复位电平结束之后,控制器应该将数据单总线拉高,以便于在1560uS后接收存在脉冲,存在脉冲为一个60240uS的低电平信号。至此,通信双方已经达成了基本 的协议,接下来将会是控制器与18B2 0间的数据通信。如果复位低电平的时间不足或是单总线的电路断路都不会接到存在脉冲,在设计时要注意意外情况的处理。u8 DS18B20_Check(void)j检测 ds18b20是否存在u8 retry=0;DS18B20_IO_IN();/SET PA0 INPUT w
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年天水市农村信用社联合社秋季校园招聘笔试备考题库(浓缩500题)及完整答案详解1套
- 喀什地区农村信用社联合社秋季校园招聘笔试备考题库(浓缩500题)及答案详解(全优)
- 2026年十堰市农村信用社联合社秋季校园招聘笔试备考题库(浓缩500题)附答案详解(a卷)
- 三明市农村信用社联合社秋季校园招聘笔试备考题库(浓缩500题)附答案详解(能力提升)
- 金华市农村信用社联合社秋季校园招聘笔试备考题库(浓缩500题)带答案详解(完整版)
- 迪庆州农村信用社联合社秋季校园招聘笔试备考题库(浓缩500题)及答案详解(必刷)
- 鹰潭市农村信用社联合社秋季校园招聘笔试备考题库(浓缩500题)及答案详解(典优)
- 河源市农村信用社联合社秋季校园招聘笔试备考题库(浓缩500题)含答案详解(考试直接用)
- 2026年三明市农村信用社联合社秋季校园招聘笔试备考题库(浓缩500题)附答案详解(轻巧夺冠)
- 密云县农村信用社联合社秋季校园招聘笔试备考题库(浓缩500题)附答案详解(能力提升)
- 2024年泰州市现代农业发展集团有限公司招聘笔试冲刺题(带答案解析)
- 幼儿园花样跳绳培训
- (正式版)SHT 3224-2024 石油化工雨水监控及事故排水储存设施设计规范
- 《气体绝缘金属封闭输电线路击穿放电监测与定位导则》
- 护理制度与职责
- 《锅炉水容积测试技术规范》
- 《老干妈的成功》课件
- 药物外渗的预防和处理护理课件
- 十大医药代表成功经验分享
- 以工代赈项目技能培训方案
- 高低压配电房维保服务方案
评论
0/150
提交评论