首先要明确几点:使用STM32串口外设中的哪一个?串口发送或者接收数据?串口相关的参数配置?发送或接收是否使用到中断?
下方为串口发送的配置。
1. RCC开启USART、串口TX/RX所对应的GPIO口
RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2,ENABLE); //开启USART2的时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE); //开启GPIOA的时钟
2. 初始化GPIO口
这里注意哈,根据自己的需求来配置GPIO口,发送和接收是都需要还是只需要其中一个。然后对应的根据引脚定义表来初始化对应的GPIO口。
USART2对应的引脚
![图片](//file1.elecfans.com/web2/M00/AD/80/wKgaomVN5C6ASwmnAACEGwhPI6Q875.jpg)
USART1对应的引脚
![图片](//file1.elecfans.com/web2/M00/AF/4D/wKgZomVN5C6AaiujAABzopcY4SM368.jpg)
这里根据手册来看,RX引脚模式配置成浮空输入或者上拉输入。TX引脚模式配置成复用推挽输出。
比如我这里只初始化TX发送端
//TX端
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP; //复用推挽输出
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_2; //USART2对应的TX端为GPIOA2
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz; //50MhZ
GPIO_Init(GPIOA,&GPIO_InitStructure);
3. 串口初始化
注意哈,USART_Init()这个函数,是用来配置串口的相关参数的。
* USART_BaudRate 串口通信使用的波特率 一般是9600或者是115200,这里我们给9600
* USART_HardwareFlowControl 是否选择硬件流触发,一般这个我们也不选,所以选择无硬件流触发。
* USART_Mode 这个参数要注意了哈,串口的模式,发送模式还是接收模式,还是两者都有
* USART_Parity 校验位,可以选择奇偶校验和不校验。没有需求就直接无校验
* USART_StopBits 停止位 有1、0.5、2位,我们这里选1位停止位
* USART_WordLength 数据位 有8位和9位可以选择
//串口初始化
USART_InitTypeDef USART_InitStruct;
USART_StructInit(&USART_InitStruct); //初始默认值
USART_InitStruct.USART_BaudRate=9600;
USART_InitStruct.USART_HardwareFlowControl=USART_HardwareFlowControl_None; //不使用硬件流触发
USART_InitStruct.USART_Mode=USART_Mode_Tx; //TX 发送模式
USART_InitStruct.USART_Parity=USART_Parity_No; //不选择校验
USART_InitStruct.USART_StopBits=USART_StopBits_1; //停止位1位
USART_InitStruct.USART_WordLength=USART_WordLength_8b; //数据位8位
USART_Init(USART2,&USART_InitStruct);
4. 串口使能
//串口使能
USART_Cmd(USART2,ENABLE);
5. 串口发送数据
注意哈,我们要判断TXE标志位的状态。0,数据还没有被转移到移位寄存器;1,数据已经被转移到移位寄存器。
当TXE标志位为1时,就说明可以发送下一个数据了。详细过程可看上面串口发送的解释。
void Serial_SendByte(uint16_t Byte)
{
USART_SendData(USART2,Byte);
//0 表示数据还未转移到移位寄存器 循环等待 1 数据已经被转移到了移位寄存器可以发送数据
while(USART_GetFlagStatus(USART2,USART_FLAG_TXE)==RESET); //不需要手动清零 再次写入TDR时会自动清零
}
经过上述五步的配置,单片机就可以通过串口发送数据了。
下方为发送数据图例,STM32向串口发送0x16数据
![图片](//file1.elecfans.com/web2/M00/AD/80/wKgaomVN5C6AehIXAADtGeauIak368.jpg)
全部0条评论
快来发表一下你的评论吧 !