




已阅读5页,还剩6页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
说明:(只要是有关引脚的功能必须先配置GPIO端口)一.对于GPIO编程 步骤:1.使能IO口时钟。调用函数为RCC_APB2PeriphClockCmd();(注意:结构体申明必须放在使能时钟语句之前) 2.初始化IO口参数。调用函数GPIO_Init(); 3.操作IO。#include led.h void LED_Init(void) /PB.5 GPIO_InitTypeDef GPIO_InitStructure; /定义GPIO的初始化结构体RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOD, ENABLE);/使能相应的引脚时钟/*GPIO结构体中的三个参数赋值*/GPIO_InitStructure. GPIO_Pin= GPIO_Pin_5; GPIO_InitStructure.GPIO_Speed= GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode= GPIO_Mode_Out_PP; GPIO_Init(GPIOB, &GPIO_InitStructure);/初始化GPIO引脚PB.5 /PD.6 | PD.3 GPIO_InitStructure. GPIO_Pin= GPIO_Pin_6 | GPIO_Pin_3;GPIO_InitStructure.GPIO_Speed= GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode= GPIO_Mode_Out_PP; GPIO_Init(GPIOD, &GPIO_InitStructure);/初始化PD.6,PD.3 二.对于定时器TIMx 产生PWM波编程 步骤:1.开启TIMx时钟以及复用功能时钟,配置相关引脚为IO复用输出(若为默认引脚复用则可以不用配置)。 2.设置TIMx通道CHy重映射到相应IO引脚上; 3.初始化TIMx,设置TIMx的ARR和PSC; 4.设置TIMx的PWM模式,使能TIMx的CHy输出; 5.使能TIMx; 6.修改TIMx_CCRy来控制占空比。(可以修改TIM_OCInitStructure.TIM_Pulse或调用函数 TIM_SetCompare2()).#include tim.h void TIM_PWM_Init(u16 aarr,u16 psc) /PB.5-TIM3_CH2 GPIO_InitTypeDef GPIO_InitStructure;/定义GPIO结构体 TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;/定义定时器TIM结构体 TIM_OCInitTypeDef TIM_OCInitStructure;/定义输出比较结构体RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_AFIO,ENABLE); /开启GPIOB时钟和GPIO复用时钟RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);/开启时钟TIM3GPIO_PinRemapConfig(GPIO_PartialRemap_TIM3, ENABLE); /Timer3部分重映射 /TIM3_CH2-PB5 /注:默认是TIM3_CH2-PA7 /*GPIO引脚配置输出TIM3_CH2的PWM脉冲波形*/ GPIO_InitStructure. GPIO_Pin= GPIO_Pin_5; GPIO_InitStructure.GPIO_Speed= GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode= GPIO_Mode_AF_PP;/此处的模式系统有规定需查阅手册得到. GPIO_Init(GPIOB,&GPIO_InitStructure);/引脚初始化PB.5/*定时器TIM初始化*/ TIM_TimeBaseStructure.TIM_Prescaler=arr; /设置在下一个更新事件装入活动的/自动重装载寄存器周期的值 TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up; /TIM向上计/数模式TIM_TimeBaseStructure.TIM_Period= psc; /设置用来作为TIMx时钟频率除数的/预分频值TIM_TimeBaseStructure.TIM_ClockDivision=0; /设置时钟分割:TDTS = Tck_timTIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);/初始化TIM /*TIMx_PWM模式配置*/ TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2; /选择定时器模/式:TIM的PWM模式2TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; /比较输出使能/TIM_OCInitStructure.TIM_Pulse = 0; /设置待装入捕获比较寄存器的脉冲值TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; /输出极性:TIM输出比较极性高TIM_OC2Init(TIM3, &TIM_OCInitStructure); /根据TIM_OCInitStruct中指定的参数初始化外设TIMxTIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable); /使能TIMx在CCR2上的预装载寄存器TIM_ARRPreloadConfig(TIM3, ENABLE); /使能TIMx在ARR上的预装载寄存器TIM_Cmd(TIM3, ENABLE); /使能TIMx外设三.对于定时器TIMx输入捕获编程 步骤:1.开启TIMx时钟和GPIO时钟,配置GPIO参数; 2.初始化TIMx的ARR和PSC; 3.设置TIMx的输入比较参数并开启输入捕获; 4.使能捕获中断和更新中断; 5.设置中断分组,编写中断服务函数; 6.使能定时器。void TIM5_Cap_Init(u16 arr , u16 psc) TIM_ICInitTypeDef TIM5_ICInitStructure;GPIO_InitTypeDef GPIO_InitStructure;TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; NVIC_InitTypeDef NVIC_InitStructure;RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM5, ENABLE);/使能TIM5时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); /使能GPIOA时钟GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; /PA0 清除之前设置 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD; /PA0 输入 GPIO_Init(GPIOA, &GPIO_InitStructure);GPIO_ResetBits(GPIOA,GPIO_Pin_0); /PA0 下拉/初始化定时器5 TIM5 TIM_TimeBaseStructure.TIM_Period = arr; /设定计数器自动重装值 TIM_TimeBaseStructure.TIM_Prescaler =psc; /预分频器 TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; /设置时钟分割:TDTS = Tck_timTIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; /TIM向上计数模式TIM_TimeBaseInit(TIM5, &TIM_TimeBaseStructure); /根据TIM_TimeBaseInitStruct中指定的参数初始化TIMx的时间基数单位/初始化TIM5输入捕获参数TIM5_ICInitStructure.TIM_Channel = TIM_Channel_1; /CC1S=01 选择输入端 IC1/映射到TI1上TIM5_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising;/上升沿捕获TIM5_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI; /映射到TI1上TIM5_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1; /配置输入分频,不分频 TIM5_ICInitStructure.TIM_ICFilter = 0x00;/IC1F=0000 配置输入滤波器 不滤波 TIM_ICInit(TIM5, &TIM5_ICInitStructure);/中断分组初始化NVIC_InitStructure.NVIC_IRQChannel = TIM5_IRQn; /TIM3中断NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2; /先占优先级2级NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; /从优先级0级NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; /IRQ通道被使能NVIC_Init(&NVIC_InitStructure); /根据NVIC_InitStruct中指定的参数初始化外设NVIC寄存器 TIM_ITConfig(TIM5,TIM_IT_Update|TIM_IT_CC1,ENABLE);/允许更新中断 ,允许CC1IE捕获中断 TIM_Cmd(TIM5,ENABLE ); /使能定时器5 /定时器5中断服务程序 void TIM5_IRQHandler(void) if(TIM5CH1_CAPTURE_STA&0X80)=0)/还未成功捕获 if (TIM_GetITStatus(TIM5, TIM_IT_Update) != RESET)if(TIM5CH1_CAPTURE_STA&0X40)/已经捕获到高电平了if (TIM_GetITStatus(TIM5, TIM_IT_CC1) != RESET)/捕获1发生捕获事件 TIM_ClearITPendingBit(TIM5, TIM_IT_CC1|TIM_IT_Update); /清除中断标志位四对于外部中断EXTI的编程配置GPIO端口,EXTI_InitTypeDef EXTI_InitStructure;GPIO_EXTILineConfig(GPIO_PortSourceGPIOE,GPIO_PinSource2);/GPIOE.2 中断线EXTI_InitStructure.EXTI_Line=EXTI_Line2;/端口对应的EXTI外部中断线 EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;/模式是中断模式而不是事件模式 EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;/中断触发方式 EXTI_InitStructure.EXTI_LineCmd = ENABLE;/使能中断线 EXTI_Init(&EXTI_InitStructure); /根据EXTI_InitStruct中指定的参数初始化外设EXTI寄存器服务程序/外部中断2服务程序void EXTI2_IRQHandler(void)delay_ms(10);/消抖if(KEY2=0) /按键KEY2LED0=!LED0; EXTI_ClearITPendingBit(EXTI_Line2); /清除LINE2上的中断标志位 四外部中断EXIT编程1. 初始化I/O口为输入;2.开启复用时钟,设置I/O口与中断线的映射关系;3.初始化线上中断,设置触发条件等;4.配置中断分组(NVIC),并使能中断;5.编写中断服务程序。void EXTIX_Init(void)NVIC_InitTypeDef NVIC_InitStructure;EXTI_InitTypeDef EXTI_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);/使能复用功能时钟/中断线以及中断初始化配置 下降沿触发 GPIO_EXTILineConfig(GPIO_PortSourceGPIOE,GPIO_PinSource0); EXTI_InitStructure.EXTI_Line=EXTI_Line0;/KEY0 EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; EXTI_InitStructure.EXTI_LineCmd = ENABLE; EXTI_Init(&EXTI_InitStructure); /根据EXTI_InitStruct中指定的参数初始化外设EXTI寄存器NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn;/使能按键所在的外部中断通道 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x02;/抢占优先级2, NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x03;/子优先级3 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;/使能外部中断通道 NVIC_Init(&NVIC_InitStructure); /外部中断0服务程序 void EXTI0_IRQHandler(void)delay_ms(10);/消抖if(KEY3=1) /WK_UP按键 BEEP=!BEEP;EXTI_ClearITPendingBit(EXTI_Line0); /清除LINE0上的中断标志位 五用FMSC驱动TFT_LCD编程步骤 1.初始化相关的GPIO口 与FMSC有关的RD、 WR、 CS、 RS、 D15-D0要设置成复用输出模式,其他的如RESET、LIGHT等为一般输出模式 2.初始化FMSC功能,LCD初始化(注意有时需要在开始设置是复位一下) 3.设置DATA_addr和REG_addr初始化地址 4.进行相关显示操作初始化(IO。FMSC。LCD):void LCD_Init(void) GPIO_InitTypeDef GPIO_InitStructure;FSMC_NORSRAMInitTypeDef FSMC_NORSRAMInitStructure; FSMC_NORSRAMTimingInitTypeDef readWriteTiming; FSMC_NORSRAMTimingInitTypeDef writeTiming; RCC_AHBPeriphClockCmd(RCC_AHBPeriph_FSMC,ENABLE);/使能FSMC时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOD|RCC_APB2Periph_GPIOE|RCC_APB2Periph_GPIOG|RCC_APB2Periph_AFIO,ENABLE);/使能PORTB,D,E,G以及AFIO复用功能时钟/PD13 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13; /PD13 推挽输出 背光 初始化为高电平 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; /推挽输出 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOD, &GPIO_InitStructure);/GPIO_SetBits(GPIOD, GPIO_Pin_13);/PB5 LED0GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;GPIO_Init(GPIOB, &GPIO_InitStructure);/PE1 复位GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;GPIO_Init(GPIOE, &GPIO_InitStructure); /PORTD复用推挽输出 D15-D13,D3-D0GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_4|GPIO_Pin_5| GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_14| GPIO_Pin_15|GPIO_Pin_7|GPIO_Pin_11; /PORTD复用推挽输出 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; /复用推挽输出 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOD, &GPIO_InitStructure); /PORTE复用推挽输出 D12-D4GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_11| GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;/PORTD复用推挽输出 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; /复用推挽输出 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOE, &GPIO_InitStructure); /FMSC读参数readWriteTiming.FSMC_AddressSetupTime = 0x01; /地址建立时间(ADDSET)为2个HCLK 1/36M=27ns readWriteTiming.FSMC_AddressHoldTime = 0x00; /地址保持时间(ADDHLD)模式A未用到 readWriteTiming.FSMC_DataSetupTime = 0x0f; / 数据保存时间为16个HCLK,因为液晶驱动IC的读数据的时候,速度不能太快,尤其对1289这个IC。 readWriteTiming.FSMC_BusTurnAroundDuration = 0x00; readWriteTiming.FSMC_CLKDivision = 0x00; readWriteTiming.FSMC_DataLatency = 0x00; readWriteTiming.FSMC_AccessMode = FSMC_AccessMode_A; /模式A /FMSC写参数writeTiming.FSMC_AddressSetupTime = 0x00; /地址建立时间(ADDSET)为1个HCLK writeTiming.FSMC_AddressHoldTime = 0x00; /地址保持时间(A writeTiming.FSMC_DataSetupTime = 0x03; /数据保存时间为4个HCLK writeTiming.FSMC_BusTurnAroundDuration = 0x00; writeTiming.FSMC_CLKDivision = 0x00; writeTiming.FSMC_DataLatency = 0x00; writeTiming.FSMC_AccessMode = FSMC_AccessMode_A; /模式A /FMSC初始化 FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM1;/ 这里我们使用NE1 ,也就对应BTCR6,7。 FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable; / 不复用数据地址 FSMC_NORSRAMInitStructure.FSMC_MemoryType =FSMC_MemoryType_SRAM;/ FSMC_MemoryType_SRAM; /SRAM FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b;/存储器数据宽度为16bit FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode =FSMC_BurstAccessMode_Disable;/ FSMC_BurstAccessMode_Disable; FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low;FSMC_NORSRAMInitStructure.FSMC_AsynchronousWait=FSMC_AsynchronousWait_Disable; FSMC_NORSRAMInitStructure.FSMC_WrapMode = FSMC_WrapMode_Disable; FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState; FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable;/ 存储器写使能 FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable; FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Enable; / 读写使用不同的时序 FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable; FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &readWriteTiming; /读写时序 FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &writeTiming; /写时序 FSMC_NORSRAMInit(&FSMC_NORSRAMInitStructure); /初始化FSMC配置 FSMC_NORSRAMCmd(FSMC_Bank1_NORSRAM1, ENABLE); / 使能BANK1 lcddev.id=0x9325;/试验用的TFT LCD 的型号 if(lcddev.id=0x9325)/9325/*PE1产生上升沿复位*/GPIO_ResetBits(GPIOE, GPIO_Pin_1); delay_ms(100); GPIO_SetBits(GPIOE, GPIO_Pin_1 ); delay_ms(100); /*/LCD_WriteReg(0x00E3,0x3008); LCD_WriteReg(0x00E3, 0x3008); / Set internal timingLCD_WriteReg(0x00E7, 0x0012); / Set internal timingLCD_WriteReg(0x00EF, 0x1231); / Set internal timingLCD_WriteReg(0x0000, 0x0001); / Start OscillationLCD_WriteReg(0x0001, 0x0100); / set SS and SM bitLCD_WriteReg(0x0002, 0x0700); / set 1 line inversionLCD_WriteReg(0x0003, 0x1018); / set GRAM write direction and BGR=0,262K colors,1 transfers/pixel.LCD_WriteReg(0x0004, 0x0000); / Resize registerLCD_WriteReg(0x0008, 0x0202); / set the back porch and front porchLCD_WriteReg(0x0009, 0x0000); / set non-display area refresh cycle ISC3:0LCD_WriteReg(0x000A, 0x0000); / FMARK functionLCD_WriteReg(0x000C, 0x0000); / RGB interface settingLCD_WriteReg(0x000D, 0x0000); / Frame marker PositionLCD_WriteReg(0x000F, 0x0000); / RGB interface polarity/Power On sequence LCD_WriteReg(0x0010, 0x0000); / SAP, BT3:0, AP, DSTB, SLP, STBLCD_WriteReg(0x0011, 0x0007); / DC12:0, DC02:0, VC2:0LCD_WriteReg(0x0012, 0x0000); / VREG1OUT voltageLCD_WriteReg(0x0013, 0x0000); / VDV4:0 for VCOM amplitudedelay_ms(200); / Dis-charge capacitor power voltageLCD_WriteReg(0x0010, 0x1690); / SAP, BT3:0, AP, DSTB, SLP, STBLCD_WriteReg(0x0011, 0x0227); / R11h=0x0221 at VCI=3.3V, DC12:0, DC02:0, VC2:0delay_ms(50); / Delay 50msLCD_WriteReg(0x0012, 0x001C); / External reference voltage= Vci;delay_ms(50); / Delay 50msLCD_WriteReg(0x0013, 0x1800); / R13=1200 when R12=009D;VDV4:0 for VCOM amplitudeLCD_WriteReg(0x0029, 0x001C); / R29=000C when R12=009D;VCM5:0 for VCOMHLCD_WriteReg(0x002B, 0x000D); / Frame Rate = 91Hzdelay_ms(50); / Delay 50msLCD_WriteReg(0x0020, 0x0000); / GRAM horizontal AddressLCD_Wr
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年新零售背景下实体书店顾客体验升级研究报告
- 2025至2030年中国减肥药行业市场深度分析及未来发展趋势预测报告
- 解析卷北师大版9年级数学上册期末试题附答案详解【轻巧夺冠】
- 解析卷山东省乐陵市中考数学真题分类(位置与坐标)汇编章节测试试题(含答案解析)
- 解析卷人教版8年级数学下册《平行四边形》定向攻克试题(含详细解析)
- 2025版水利工程地质勘察合同范本
- 2025办公空间租赁合同(含装修及维护条款)
- 2025年度润滑油产品回收与再利用合同
- 2025年度专业图形设计电脑租赁合同范本
- 2025年度餐饮企业员工职业培训合同范本
- 2025上海市食品药品包装材料测试所公开招聘笔试参考题库附答案解析
- 2025秋季开学初班主任会议德育副校长讲话:从‘知责’到‘善育’这4步你做到几步
- 新生儿病房护理安全管理
- 瑞雪迎春春节家宴主题说明书
- 军用车修理知识培训课件
- 医务人员职业道德准则(2025年版)全文培训课件
- 乘客遗失物品处理课件
- 2025年云南省中考物理真题(含答案)
- 医院保卫科岗位竞聘工作汇报
- 医院科室停电应急预案
- 2025年教育学家教学理论考试试题及答案解析
评论
0/150
提交评论