关于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.9GPIO_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;//PA10GPIO_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.串口传输状态获取


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部