历史上的今天
返回首页

历史上的今天

今天是:2025年04月25日(星期五)

正在发生

2020年04月25日 | STM32 串口通信(库函数操作)

2020-04-25 来源:eefocus

1.说在前面:


清明三天小假期,放松一下无可厚非,但是,依旧要完成自己的学习任务


2.串口通信的简单介绍:


1.将串口作为一个沟通的渠道,可以和外界进行接收和发送信号


2.STM32和串口相关的寄存器:


2-1:USART_SR(状态寄存器):存储着MCU的一些状态


2-2:USART_DR(数据寄存器):暂存着一些数据信息


2-3:USART_BRR(波特率寄存器:暂存波特率信息


2-4:USART_CRI(控制寄存器):用于给usart进行使能


3.注:波特率的计算方法:

只要给出相应的时钟频率和设置usartdiv,就可以计算出波特率


3.串口通讯的简单配置和使用


1.其实基于库函数而言:需要有一个理顺的思路,知道每一步需要做什么,然后去寻找相应的库函数


2.怎样实现串口通讯呢?


1.串口时钟和GPIO时钟使能


2.串口复位(不必须)


3.GPIO设置:注意rxd和txd在设置过程中设置输入输出方法的不同(AF_PP|IN_FLOATING)


4.串口参数初始化(这里面要初始化蛮多参数的,但是要记住每个参数的设定,通信双方要约定参数一致)


5.开启中断,使能 NVIC


6.实现串口的使能


7.编写中断处理函数


8.实现串口数据的收发


9.实现串口传输状态获取


#include"stm32f10x.h"

 

void my_USART_Init()

{

GPIO_InitTypeDef GPIO_InitStruct;

USART_InitTypeDef USART_InitStruct;

NVIC_InitTypeDef  NVIC_InitStruct;

//1.时钟使能

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//ENABLE THE GPIOA

RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);//ENABLE THE USART1

//2.GPIOA9 init

GPIO_InitStruct.GPIO_Mode=GPIO_Mode_AF_PP;//复位推挽输出

GPIO_InitStruct.GPIO_Pin=GPIO_Pin_9 ;

GPIO_InitStruct.GPIO_Speed=GPIO_Speed_10MHz;

GPIO_Init(GPIOA,&GPIO_InitStruct);

//2.GPIOA10 init

GPIO_InitStruct.GPIO_Mode=GPIO_Mode_IN_FLOATING;//浮空输入

GPIO_InitStruct.GPIO_Pin=GPIO_Pin_10;

GPIO_InitStruct.GPIO_Speed=GPIO_Speed_10MHz;

GPIO_Init(GPIOA,&GPIO_InitStruct);

//3.usart init

USART_InitStruct.USART_BaudRate=115200;//设置波特率

USART_InitStruct.USART_HardwareFlowControl=USART_HardwareFlowControl_None;//设置硬件流设置

USART_InitStruct.USART_Mode= USART_Mode_Rx | USART_Mode_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(USART1,&USART_InitStruct);

//初始化某串口

USART_Cmd(USART1,ENABLE);//´串口使能

USART_ITConfig(USART1,USART_IT_RXNE,ENABLE);//实现中断

//中断优先级

NVIC_InitStruct.NVIC_IRQChannel=USART1_IRQn;

NVIC_InitStruct.NVIC_IRQChannelCmd=ENABLE;

NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority=1;

NVIC_InitStruct.NVIC_IRQChannelSubPriority=1;

NVIC_Init(&NVIC_InitStruct);

}

//中断处理函数

void USART1_IRQHandler(void)

{

u8 res;

if(USART_GetITStatus(USART1,USART_IT_RXNE))//ÅжÏÖжÏģʽ

{

res= USART_ReceiveData(USART1);

USART_SendData(USART1,res);

}

}

int main()

{

NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置中断优先级

my_USART_Init();

while(1);

}

推荐阅读

史海拾趣

DEWALT公司的发展小趣事

DEWALT公司非常注重产品品质和用户体验。公司建立了严格的质量控制体系,确保每一件产品都符合高质量标准。同时,DEWALT还积极倾听用户反馈,不断改进产品和服务。这些努力使DEWALT公司的电动工具在市场上获得了广泛认可,并赢得了大量忠实用户。

永源微电子(APM)公司的发展小趣事

2023年,永源微电子成功完成了A轮融资,这是公司发展过程中的一个重要里程碑。此次融资由深圳英集芯科技股份有限公司领投,为公司带来了丰富的资金支持和市场资源。通过与英集芯科技的战略合作,永源微电子在微电子领域的技术创新和产品研发上取得了新的突破。双方共同开展研发项目,推动技术的突破和应用场景的拓展,为公司的未来发展注入了强大的动力。

EPIC公司的发展小趣事

近年来,随着元宇宙概念的兴起,Epic Games也开始在这一领域进行布局。公司首席执行官Tim Sweeney对元宇宙的发展潜力持乐观态度,并认为这将是未来游戏和社交领域的重要发展方向。为了实现这一愿景,Epic Games不仅在技术上进行了大量投入和研发,还与多个合作伙伴共同推动元宇宙生态的建设和发展。这些举措使得Epic Games在元宇宙领域取得了显著的进展,并有望在未来成为该领域的领军企业之一。

比亚迪(BYD)公司的发展小趣事

近年来,比亚迪在电子行业的发展进入了新的阶段。为了巩固和扩大国内市场的发展优势,同时加速海外布局,比亚迪开始实施多品牌策略。通过推出不同定位、不同价格区间的产品系列,比亚迪满足了更多消费者的需求。同时,比亚迪还积极推进本地化生产进程,在海外设立生产基地,提高生产效率和降低成本。这些举措不仅提升了比亚迪在全球市场的竞争力,也为其未来的可持续发展奠定了坚实基础。

这些故事展示了比亚迪在电子行业中的发展历程和关键节点,从电池技术的突破、进军海外市场、新能源汽车转型、品牌形象更新到多品牌策略的实施,都体现了比亚迪不断创新、追求卓越的精神。

佰鸿(BrtLed)公司的发展小趣事

近年来,佰鸿公司开始将业务触角延伸至再生医学领域。通过多年的努力,公司成功建立了再生医学医疗与健康科技生态圈,并逐步实现了产业集群化。在再生医学领域,佰鸿不仅建立了产业化场地和研发设备,还计划在未来几年内打造国际领先的再生医学产业集群。这一多元化的发展战略,使得佰鸿在电子行业之外,也找到了新的增长点。

国产公司的发展小趣事
信号线路受到周围电磁场的干扰。可以通过使用屏蔽线缆、隔离电源等措施来减少电磁干扰。

问答坊 | AI 解惑

AT89C2051与74LS164....紧急...

请问高手:如图,我这样连接的显示电路错没? 老师说RXD不能输出,TXD不能作为74LS164的CLOCK信号,  还有第2个164的A.B不能接上一组164输出的的信号,要我改....我真的郁闷了 请高手指教....速度啊...紧急...…

查看全部问答>

关于读取FLASH数据的问题

在BOOTLOADER中把NK下载到NOR FLASH中,现在想把写入得数据打印出来该怎么做,可以直接访问FLASH的地址吗,我试了下发现读不出来,(全是0),还是要写了类似驱动的东西…

查看全部问答>

如何读prolific usb转串口转过来的串口

也是用createfile读吗   和普通的com特性一样吗 …

查看全部问答>

新手,询问pda与远程的数据库(oracle)同步问题,急!!!

原来没有做过嵌入式的开发,现在想在pda下做二次开发,系统是wince的,pda上的数据需要跟远程服务器的数据库做数据同步,远程的数据库为oracle,系统为b/s结构的,pda需要连接到pc机上在做同步,pc机可以连接系统,请教思路或者是有什么资料,万分 ...…

查看全部问答>

液晶显示模块

哪位高人帮我指点一下L046R4这个四位八段的液晶显示屏怎么用C语言编程,它好像没有时钟,下边是它的PDF资料,急求。谢谢! [ 本帖最后由 烟雨 于 2011-4-18 10:29 编辑 ]…

查看全部问答>

常用集成电路引脚识别

常用集成电路引脚识别:各种不同的集成电路引脚有不同的识别标记和不同的识别方法,掌握这些标记及识 别方法,对于使用、选购、维修测试是极为重要的。⒈缺口 在IC的一端有一半圆形或方形的缺口。⒉凹坑 色点或金属片 在IC一角有一凹坑、色 ...…

查看全部问答>

闲置物品兑换--TI POS机套件~~~

不错的芯币交换活动,支持一下~~~ 一直闲置着这套TI POS机套件 1500芯币不包邮转给有需要的朋友~~~ …

查看全部问答>