一、电路中电平的理解
几乎所有单片机周边芯片都是TTL电平
H是高电平,L是低电平
之前写的LED灯点亮是灌电流驱动,低电平点亮
上下拉电阻,在没有作业时给外界一个高低电平
二、GPIO_WriteBit
中枚举的巧用
typedef enum
{ Bit_RESET = 0,
Bit_SET
}BitAction;
GPIO_WriteBit(LEDPORT,LED1,(BitAction)(1)); //LED1接口输出高电平1
其中BitAction
居然是枚举,枚举还能这么用
//#define KEY1 PAin(0)// PA0
//#define KEY2 PAin(1)// PA1
#define KEYPORT GPIOA //定义IO接口组
#define KEY1 GPIO_Pin_0 //定义IO接口
#define KEY2 GPIO_Pin_1 //定义IO接口
PBout(n)
和PBin(n)
感觉没啥用啊,为啥要把接口的in和out单独划分,直接弄个下面的_0和_1不就行了?
GPIO_WriteBit(LEDPORT,LED1,(BitAction)(1-GPIO_ReadOutputDataBit(LEDPORT,LED1))); //LED取反
这个1-x
和!x
有啥区别?
三、判断if(USART_RX_STA&0xC000)
判断if(USART_RX_STA&0xC000)
按位与操作,刚开始不是很理解这个按位与咋判断if,思考后觉得这个判断条件是如果括号里面的数不为0,就是真,因为在c语言中,非0即为真,豁然开朗!!
四、为什么用0x3FFF来判断接收状态标记?
}else if((USART1_RX_STA&0x3FFF)==1){ //判断数据是不是2个
USART_RX_STA的bit15表示接收完成标志,bit14表示接收到0X0D,这是个接收的协议。USART_RX_STA&0x8000即bit15位比较,若为1则接受完成,之后再接收判断长度。也就是剩余14位比较,USART_RX_STA&0x3fff,0x3fff即0011 1111 1111 1111,bit相同则为1否则为0,便可得到USART_RX_STA的低14位的值,便得到其长度
真吐了,鸡零狗碎的知识,怎么有人能这么细节