
先把A口的时钟使能,再将其失能。这样A口就不能用了。
通常我们初始化也会这么写:
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB
|RCC_APB2Periph_GPIOC |RCC_APB2Periph_GPIOD ,ENABLE)
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN
GPIO_Init(GPIOA, &GPIO_InitStructure)
GPIO_Init(GPIOB, &GPIO_InitStructure)
GPIO_Init(GPIOC, &GPIO_InitStructure)
GPIO_Init(GPIOD, &GPIO_InitStructure)
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB
|RCC_APB2Periph_GPIOC | RCC_APB2Periph_GPIOD , DISABLE)
比你的句子多一个端口模式的配置 。
在keil Debug时你会从GPIO的寄存器看到,没有用到的IO都是这里初始化设置的模式。可见在你再次改动配置之前,IO都是按照上次的配置执行的。所以端口的模式我们也是有必要进行初始化的。
1、volatile 就是个关键字,代表该关键字具体数值会预想不到的被改变,避免编译器优化掉。更具体的理解可以在论坛上搜索。(解释很多字,这里不好打出来)2、typedef也是一个关键字,其实就是给另外的变量换一个名字而已。
例如:typedef unsigned char uint8_t
后面你要定义一个unsigned char 型变量:
unsigned char a等同于uint8_t a有没有觉得后面的定义比前面更易读?
其实标准的命名是这样:uint8_t u8_a这样后面你用这个变量,时刻都清除这个变量是无符号占8个字节,这样就会大大避免数据溢出这个错误。
就是将一个IO口的电平变为它之前的相反电平,最重要的这句(BitAction)(1-GPIO_ReadOutputDateBit(GPIOC, GPIO_Pin_3)
如果之前是0,那么1-0就是1;如果之前是1,那么1-1就是0;这是用库函数 *** 作的,内部怎样实现,你不需要知道,直接调用就行了
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)