记得自学的时候,无论是师傅还是书本都说要学好通讯,这是基于信息传输信号响应的基础,反正无论是啥不论咱都学呗!落后就要挨打
一,单片机的引脚作为通讯引脚
单片机设置了引脚GPIOA.9和GPIOA.10 作为通讯的引脚,很显然通讯即有发送数据和接收数据,单片机规定GPIOA.9作为发送端,GPIOA.10作为接收端
void GPIO_Confiuration(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_9;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;//推挽输出
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOA,&GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_10;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;//浮空输入
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOA,&GPIO_InitStructure);
}
GPIOA.9作为Tx发送端配置为推挽输出
GPIOA.10作为Rx接收端配置为浮空输入;注模拟输入是为ADC信号输入准备的
引脚配置完成后就可以写入通讯配置,但是在电路方面单片机信号并不能直接与CPU 直接传输数据,必须借助外部芯片转换像常用的485,232,还有TTL;
485通讯直接对接
而232分为直通线和交叉线,无论是哪种接法记住了要把一个的发送端接到另一个的接收端 ,而另一个的发送端接到这个的接收端 就行了,芯片的电源,和电路电容,滤波电容要按照芯片手册上去分配布置电路尽量减少信号的干扰!
void USART_Confiuration(void)
{
USART_InitTypeDef USART_InitStructure;
USART_InitStructure.USART_BaudRate=9600;
USART_InitStructure.USART_WordLength=USART_WordLength_8b;
USART_InitStructure.USART_StopBits=USART_StopBits_1;
USART_InitStructure.USART_Parity=USART_Parity_No;
USART_InitStructure.USART_HardwareFlowControl=USART_HardwareFlowControl_None;
USART_InitStructure.USART_Mode=USART_Mode_Rx|USART_Mode_Tx;
USART_Init(USART1,&USART_InitStructure);
USART_Cmd(USART1,ENABLE);
}
//定义变量
//设置波特率,就是传播速度,常用值9600,115200
//设置接受一个数据位数
USART_WordLength_8b或者USART_WordLength_9b
//设置在结束或发送数据后加入停止位的个数
USART_StopBits_1或者USART_StopBits_0.5或者USART_StopBits_2或者USART_StopBits_1.5
//设计奇偶模式
USART_Parity_No奇偶失能或者USART_Parity_Even偶模式或者USART_Parity_Odd奇模式
//设置硬件流控制模式
USART_HardwareFlowControl_None;硬件流控制失能
USART_HardwareFlowControl_RTS;发送请求RTS使能
USART_HardwareFlowControl_CTS;清除发送CTS使能
USART_HardwareFlowControl_RTS_CTS;RTS和CTS使能
//使能接受发送模式
//使能USART1;
其实在配置USART函数时,有很多是基础设置也有一些是为了检验数据而设计的传输模式