关于STM32F10x串口UART相关代码笔记

目录

一、更新时间

二、相关器件

三、硬件连接

四、现象与事件

五、具体操作:

 5.1 常用的串口相关寄存器以及波特率计算

 5.1 串口配置步骤


一、更新时间

        2022.1.23

二、相关器件

        stm32f103c8t6最小系统板,CH340。

三、硬件连接

        PA9与PA10

四、现象与事件

        接收电脑发送的数据,再发回给电脑。

五、具体操作:

        UART(通用异步收发器)为异步通讯(无时钟),所以要双方约定好波特率。需要定义的参数如下:

                1.起始位;

                2.数据位;

                3.奇偶校验位;(可以没有)

                4.停止位;

                5.波特率。

 5.1 常用的串口相关寄存器以及波特率计算

        USART_SR状态寄存器:串口传输当前的状态数据。

        USART_DR数据寄存器:数据的中转站。

        USART_CR1控制寄存器:发送接受使能以及一些中断使能。

        USART_BRR波特率寄存器。

        其中波特率计算方法如下:

\frac{PCLK}{16*USARTIV}

        其中PCLK1用于USART2、3、4、5;PCLK2用于USART1。PCLK2时钟最高可达72MHz,而PCLK1最大36MHz。比如需要设置串口1波特率为115200,则:

USARTDIV=\frac{72000000}{115200*16}=39.0625

        则DIV_Fraction=16*0.625=1=0x01;

           DIV_Mantissa=39=0x27。

        所以BRR寄存器的值设置为0x0271。

 5.1 串口配置步骤

        1.串口时钟使能

	RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);	
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);

        2.串口复位(可有可无)

        3.GPIO模式设置

  GPIO_InitTypeDef GPIO_InitStructure;
	
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; //PA.9
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;	//复用推挽输出
  GPIO_Init(GPIOA, &GPIO_InitStructure); 
  
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;//PA10
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//浮空
  GPIO_Init(GPIOA, &GPIO_InitStructure);

        4.串口参数初始化

	USART_InitTypeDef USART_InitStructure;
	
	USART_InitStructure.USART_BaudRate = 115200;//波特率
    USART_InitStructure.USART_HardwareFlowControl=USART_HardwareFlowControl_None;//无硬件流
	USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;	//发送与接收使能
	USART_InitStructure.USART_Parity = USART_Parity_No;//无奇偶校验
	USART_InitStructure.USART_StopBits = USART_StopBits_1;//停止位1位
    USART_InitStructure.USART_WordLength = USART_WordLength_8b;//位数无奇偶校验8位

        5. 初始化NVIC

        看这个(36条消息) 关于STM32F103中断优先级管理NVIC_hus5487的博客-CSDN博客

        6.使能串口并开启中断

	USART_InitTypeDef USART_InitStructure;
	
	USART_InitStructure.USART_BaudRate = 115200;//波特率
    USART_InitStructure.USART_HardwareFlowControl=USART_HardwareFlowControl_None;//无硬件流
	USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;	//发送与接收使能
	USART_InitStructure.USART_Parity = USART_Parity_No;//无奇偶校验
	USART_InitStructure.USART_StopBits = USART_StopBits_1;//停止位1位
    USART_InitStructure.USART_WordLength = USART_WordLength_8b;//位数无奇偶校验8位

    USART_Init(USART1, &USART_InitStructure); 
    USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);//开启串口接受中断,接收数据就跳中断子函数
    USART_Cmd(USART1, ENABLE);

        7.编写中断处理函数

void USART1_IRQHandler(void)                	//中断服务函数
	{
	u8 Res;
	if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)  //判断是否接收数据
	{
		Res =USART_ReceiveData(USART1);	//读取数据
        USART_SendDats(USART1,Res)	; //接受的数据发回去
     } 

        8.串口数据收发

        9.串口传输状态获取

版权声明:本文为CSDN博主「小胡同学的学习笔记」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/hus5487/article/details/122646002

目录

一、更新时间

二、相关器件

三、硬件连接

四、现象与事件

五、具体操作:

 5.1 常用的串口相关寄存器以及波特率计算

 5.1 串口配置步骤


一、更新时间

        2022.1.23

二、相关器件

        stm32f103c8t6最小系统板,CH340。

三、硬件连接

        PA9与PA10

四、现象与事件

        接收电脑发送的数据,再发回给电脑。

五、具体操作:

        UART(通用异步收发器)为异步通讯(无时钟),所以要双方约定好波特率。需要定义的参数如下:

                1.起始位;

                2.数据位;

                3.奇偶校验位;(可以没有)

                4.停止位;

                5.波特率。

 5.1 常用的串口相关寄存器以及波特率计算

        USART_SR状态寄存器:串口传输当前的状态数据。

        USART_DR数据寄存器:数据的中转站。

        USART_CR1控制寄存器:发送接受使能以及一些中断使能。

        USART_BRR波特率寄存器。

        其中波特率计算方法如下:

\frac{PCLK}{16*USARTIV}

        其中PCLK1用于USART2、3、4、5;PCLK2用于USART1。PCLK2时钟最高可达72MHz,而PCLK1最大36MHz。比如需要设置串口1波特率为115200,则:

USARTDIV=\frac{72000000}{115200*16}=39.0625

        则DIV_Fraction=16*0.625=1=0x01;

           DIV_Mantissa=39=0x27。

        所以BRR寄存器的值设置为0x0271。

 5.1 串口配置步骤

        1.串口时钟使能

	RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);	
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);

        2.串口复位(可有可无)

        3.GPIO模式设置

  GPIO_InitTypeDef GPIO_InitStructure;
	
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; //PA.9
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;	//复用推挽输出
  GPIO_Init(GPIOA, &GPIO_InitStructure); 
  
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;//PA10
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//浮空
  GPIO_Init(GPIOA, &GPIO_InitStructure);

        4.串口参数初始化

	USART_InitTypeDef USART_InitStructure;
	
	USART_InitStructure.USART_BaudRate = 115200;//波特率
    USART_InitStructure.USART_HardwareFlowControl=USART_HardwareFlowControl_None;//无硬件流
	USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;	//发送与接收使能
	USART_InitStructure.USART_Parity = USART_Parity_No;//无奇偶校验
	USART_InitStructure.USART_StopBits = USART_StopBits_1;//停止位1位
    USART_InitStructure.USART_WordLength = USART_WordLength_8b;//位数无奇偶校验8位

        5. 初始化NVIC

        看这个(36条消息) 关于STM32F103中断优先级管理NVIC_hus5487的博客-CSDN博客

        6.使能串口并开启中断

	USART_InitTypeDef USART_InitStructure;
	
	USART_InitStructure.USART_BaudRate = 115200;//波特率
    USART_InitStructure.USART_HardwareFlowControl=USART_HardwareFlowControl_None;//无硬件流
	USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;	//发送与接收使能
	USART_InitStructure.USART_Parity = USART_Parity_No;//无奇偶校验
	USART_InitStructure.USART_StopBits = USART_StopBits_1;//停止位1位
    USART_InitStructure.USART_WordLength = USART_WordLength_8b;//位数无奇偶校验8位

    USART_Init(USART1, &USART_InitStructure); 
    USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);//开启串口接受中断,接收数据就跳中断子函数
    USART_Cmd(USART1, ENABLE);

        7.编写中断处理函数

void USART1_IRQHandler(void)                	//中断服务函数
	{
	u8 Res;
	if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)  //判断是否接收数据
	{
		Res =USART_ReceiveData(USART1);	//读取数据
        USART_SendDats(USART1,Res)	; //接受的数据发回去
     } 

        8.串口数据收发

        9.串口传输状态获取

版权声明:本文为CSDN博主「小胡同学的学习笔记」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/hus5487/article/details/122646002

生成海报
点赞 0

小胡同学的学习笔记

我还没有学会写个人说明!

暂无评论

发表评论

相关推荐

STM32F103(七)——通用定时器的说明与功能

前言 本节我们会对STM32的通用定时器功能进行说明和介绍,也是对 STM32(六) 与STM32(七)进行一个总结说明 ——————————————————————————————————————

关于STM32F10x串口UART相关代码笔记

目录 一、更新时间 二、相关器件 三、硬件连接 四、现象与事件 五、具体操作: 5.1 常用的串口相关寄存器以及波特率计算 5.1 串口配置步骤 一、更新时间 2022.1.23 二、相关器件 stm32f103c8t

06_基于树莓派wiringPi的温湿度采集实验

目的: 通过温湿度的代码编写,熟悉树莓派中的单总线操作流程。 目录 1、基础知识 1.1、DHT11数字温湿度传感器简介 1.2、DHT11单总线通信协议定义 2、功能实现 2.1、原理图 2.2、代码实