你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

基于STM32F1的串口配置代码经验分享

[复制链接]
攻城狮Melo 发布时间:2023-5-14 19:12
前言
  STM32的串口通信是最常用的通信方式,串口通信(Serial Communications)的概念非常简单,串口按位(bit)发送和接收字节。尽管比按字节(byte)的并行通信慢,但是串口可以在使用一根线发送数据的同时用另一根线接收数据。它很简单并且能够实现远距离通信。下面根据stm32f1的中文手册和stm32f1固件库来配置一个串口。

查看原理图
  通过STM32F103RET6的原理图知道串口1的管脚为PA9和PA10,下面就需要将这两个管脚配置为串口1。

17b4c880436b497f83e3ddb5d00b1a04.png

引脚初始化
  和配置GPIO一样,使用引脚前需要使能RCC时钟,查看总线架构可以知道,GPIOA和USART1是在APB2下的。

cb996ea2bc0e47d692f7d4d79e51d62c.png

  查看STM32F1的库函数手册初始化函数。

3bd3c8f860b846f1b3c08a955283c9e1.png

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_USART1 , ENABLE);

  开启RCC时钟后,就可以进行引脚初始化了,查看库函数中的GPIO_Init函数,找到下面的实例,复制修改一下即可。

475a1a3253444c06b5e21e6cee5eb3e3.png

  串口的引脚模式要根据STM32F1中文参考手册的8.1.11外设的GPIO配置来配置,将PA9.TX配置为推挽复用输出,PA10.RX配置为上拉输入。

355344a0a12a412494ce1d8f9d20a017.png

  1. GPIO_InitTypeDef GPIO_InitStructure;
  2.          //PA9.TX
  3.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; //PA9
  4.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  5.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用推挽输出
  6.         GPIO_Init(GPIOA, &GPIO_InitStructure);
  7.         //PA10.RX
  8.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; //PA10
  9.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  10.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //上拉输入
  11.         GPIO_Init(GPIOA, &GPIO_InitStructure);
复制代码

串口初始化
  查看STM32F1的库函数中文参考手册的USART_Init,根据 USART_InitStruct 中指定的参数初始化外设 USARTx 寄存器,一般只需要配置前六将,后面四想默认配置即可

5f74b58dadbe41778a5a49fe42117995.png

  1. USART_InitTypeDef USART_InitStructure;
  2. USART_InitStructure.USART_BaudRate = 115200; //设置波特率
  3. USART_InitStructure.USART_WordLength = USART_WordLength_8b; //8 位数据
  4. USART_InitStructure.USART_StopBits = USART_StopBits_1;//在帧结尾传输 1 个停止位
  5. USART_InitStructure.USART_Parity = USART_Parity_No; //奇偶失能,无校验
  6. USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;// 硬件流控制失能
  7. USART_InitStructure.USART_Mode = USART_Mode_Tx | USART_Mode_Rx;//发送、接收使能
复制代码

完整配置代码
  1. void Usart1_Init(void)//串口1初始化
  2. {
  3.        
  4.        
  5.         //GPIO端口配置
  6.         GPIO_InitTypeDef GPIO_InitStructure;
  7.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_USART1 , ENABLE);//使能RCC时钟
  8.          //PA9.TX
  9.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; //PA9
  10.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  11.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用推挽输出
  12.         GPIO_Init(GPIOA, &GPIO_InitStructure);
  13.         //PA10.RX
  14.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; //PA10
  15.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  16.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //上拉输入
  17.         GPIO_Init(GPIOA, &GPIO_InitStructure);
  18.        
  19.         //USART 初始化设置       
  20.         USART_InitTypeDef USART_InitStructure;
  21.        
  22.         USART_InitStructure.USART_BaudRate = 115200; //设置波特率
  23.         USART_InitStructure.USART_WordLength = USART_WordLength_8b; //8 位数据
  24.         USART_InitStructure.USART_StopBits = USART_StopBits_1;//在帧结尾传输 1 个停止位
  25.         USART_InitStructure.USART_Parity = USART_Parity_No; //奇偶失能,无校验
  26.         USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;// 硬件流控制失能
  27.         USART_InitStructure.USART_Mode = USART_Mode_Tx | USART_Mode_Rx;//发送、接收使能
  28.        
  29.         USART_Init(USART1, &USART_InitStructure);//初始化串口1
  30.         USART_Cmd(USART1, ENABLE);               //使能串口1

  31. }
复制代码


发送单个数据
  1. void Usart1_sentbyte(char data)
  2. {
  3.         while(!(USART_GetFlagStatus(USART1, USART_FLAG_TXE)==SET));
  4.         USART_SendData(USART1,data);
  5.        
  6. }
复制代码


发送字符串
  1. void Usart1_sentstring(char *data)
  2. {
  3.         while(*data)
  4.         Usart1_sentbyte(*data++);
  5.        
  6. }
复制代码


接收字符

  1. char Usart1_Receivebyte(void)
  2. {
  3.         while(!(USART_GetFlagStatus(USART1, USART_FLAG_RXNE)==SET));
  4.         return USART_ReceiveData(USART1);
  5. }
复制代码



————————————————
版权声明:纸箱里的猫咪
如有侵权请联系删除



收藏 评论0 发布时间:2023-5-14 19:12

举报

0个回答

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版