1、 . 1 . 2 . 2 . 2 . 2 . 2 . 2IO的输入和输出宏定义方式: . 3读取某个IO的电平函数: . 3IO口方向切换成双向 . 3IO 口外部中断的一般步骤: . 3内部ADC使用总结: . 4LCDTFT函数使用大全 . 5TFTLCD使用注意点: . 5IO端口宏定义和使用方法: . 6Keil使用心得: . 6ucGUI移植 . 6DDS AD9850测试程序: . 6ADC 使用小结: . 7ADC测试程序: . 9DACtlv5638测试程序 . 9红外测试程序: . 9DMA使用心得: . 9通用定时器使用: . 9BUG发现: . 10编程总结:时钟总结:
2、. 10汉字显示(外部SD卡字库): . 11字符、汉字显示(内部FLASH) . 12图片显示: . 16触摸屏: . 17引脚连接: . 19delay_ms(u16 nms);delay_us(u32 nus);1)使能IO 口时钟。调用函数为RCC_APB2PeriphClockCmd()。2)初始化IO 参数。调用函数GPIO_Init();3)操作IO。RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);RCC_APB2Peri
3、phClockCmd(RCC_APB2Periph_GPIOC,ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD,ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE,ENABLE);GPIO_InitTypeDefGPIO_InitStructure; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13|GPIO_Pin_15; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; GPIO_Init(GPIOA, &G
4、PIO_InitStructure); /上拉输入GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA, & /LED0-PA.8 端口配置 /推挽输出技巧:如果为同一端口的不同引脚,可以使用或运算,如GPIO_InitStructure.GPIO_Pin =GPIO_Pin_13|GPIO_Pin_15;GPIO_SetBits(GPIOA,
5、GPIO_Pin_8|GPIO_Pin_9); /PA.8 输出高 GPIO_ResetBits(GPIOA,GPIO_Pin_8);GPIO_WriteBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, BitActionBitVal);/可以输出1,也可以输出0GPIO_Write(GPIO_TypeDef* GPIOx, uint16_t PortVal);/整体输出一个值#define DATAOUT(x) GPIOB-ODR=x; /数据输出#define DATAIN GPIOB-IDR; /数据输入#define DATAOUT(DataVal
6、ue)GPIO_Write(GPIOB,(GPIO_ReadOutputData(GPIOB)&0xff00)|(DataValue&0x00FF); /PB07,作为数据线(一) 读出一个IO口电平GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)#define KEY0 GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_13) /PA13#define KEY1 GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_15) /PA15#define KEY2 GPIO_Rea
7、dInputDataBit(GPIOA,GPIO_Pin_0)(二) 读出某个IO口的全部电平GPIO_ReadInputData(GPIOC)IO口方向切换成双向IIC里面的一个实例#define SDA_IN() GPIOC-CRH&=0XFFFF0FFF;GPIOC-CRH|=8CRH|=31)初始化IO 口为输入。2)开启IO 口复用时钟,设置IO 口与中断线的映射关系。3)初始化线上中断,设置触发条件等。4)配置中断分组(NVIC),并使能中断。5)编写中断服务函数。例程:开启IO 口复用时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RC
8、C_APB2Periph_AFIO,ENABLE);GPIOA.13 中断线以及中断初始化配置 GPIO_EXTILineConfig(GPIO_PortSourceGPIOA,GPIO_PinSource13); EXTI_InitTypeDef EXTI_InitStructure; EXTI_InitStructure.EXTI_Line=EXTI_Line13; EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; / 此外还
9、可以为(EXTI_Trigger_Rising,EXTI_Trigger_Rising_Falling) EXTI_InitStructure.EXTI_LineCmd = ENABLE;EXTI_Init(&EXTI_InitStructure); NVIC_InitTypeDef NVIC_InitStructure; NVIC_InitStructure.NVIC_IRQChannel = EXTI15_10_IRQn;/使能按键所在的外部中断通道 / 此外还可以为NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn ; NVIC_InitStr
10、ucture.NVIC_IRQChannelPreemptionPriority = 0x02;/抢占优先级2, NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x01; /子优先级1 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; /使能外部中断通道 NVIC_Init(&NVIC_InitStructure);中断函数的编写:(蓝色字体为格式)void EXTI0_IRQHandler(void)delay_ms(10); /消抖if(EXTI_GetITStatus(EXTI_Line0) != RESET) /检查指定的EXTI0线路触发请求发生与否 LED0=!LED0;LED1=!LED1;EXTI_ClearITPendingBit(EXTI_Line0); /清除EXTI0线路挂起位void EXTI15_10_IRQHandler(void)if(EXTI_GetITStatus(EXTI_Line13) != RESET) else if (EXTI_GetITStatus(EXTI_Line15) !EXTI_ClearITPendingBit(EXTI_Line13); /清除EXTI13线路挂起位EXTI_ClearITPendi
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1