历史上的今天
返回首页

历史上的今天

今天是:2024年09月24日(星期二)

正在发生

2019年09月24日 | STM32F1x系列——串口通信

2019-09-24 来源:eefocus

一  在STM32F1x系列串口通信实验中,常用的寄存器有:


(1)USART_SR  状态寄存器   


(2)USART_DR  数据寄存器  


(3)USART_BRR  波特率寄存器  


(4) USART_CR   使能位


 二  串口操作相关的库函数(省略入口参数):


(1)void USART_Init() ;  //串口初始化:波特率,数据字长,奇偶校验,硬件流控以及收发使能


(2)void USART_Cmd ;  //使能串口


(3)void USART_ITConfig() ;  //使能相关中断




(4)void USART_SendData() ;  //发送数据到串口,DR


(5)uint16_t USART_ReceiveData() ;  //接受数据,从DR读取接受到的数据




(6)FlagStatus USART_GetFlagStatus() ;  //获取状态标志位


(7)void USART_ClearFlag() ;  //清除状态标志位


(8)ITStatus USART_GetITStatus() ;  //获取中断状态标志位


(9)void USART_ClearITPendingBit() ;  //清除中断状态标志位


      三  串口配置的一般步骤:


(1)串口时钟使能,GPIO时钟使能:RCC_APB2PeriphClockCmd() ;


(2)串口复位:USART_DeInit() ; 这一步不是必须的


(3)GPIO端口模式设置:GPIO_Init() ; 模式设置为GPIO_Mode_AF_PP


(4)串口参数初始化:USART_Init() ;


(5)开启中断并且初始化NVIC(如果需要开启中断才需要这个步骤):


          NVIC_Init() ;


          USART_ITConfig() ;


(6)使能串口:USART_Cmd() ;


(7)编写中断处理函数:USARTx_IRQHandler() ;


(8)串口数据的收发:


         void USART_SendData() ;   //发送数据到串口,DR


         uint16_t USART_ReceiveData() ;  //接受数据,从DR读取接受到的数据


(9)串口传输状态获取:


         FlagStatus USART_GetFlagStatus(RT_FLAUSART_TypeDef * USARTx , uint16_t USART_FLAG) ; 


         void USART_ClearITPendingBit(RT_FLAUSART_TypeDef * USARTx , uint16_t USART_IT) ;


      程序中的main.c文件 代码如下:


#include "stm32f10x.h"

 

 void My_USART1_Init()

 {

    GPIO_InitTypeDef GPIO_InitStruct ;

    USART_InitTypeDef USART_InitStruct ;

    NVIC_InitTypeDef NVIC_InitStruct ;

 

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE) ;   //GPIO时钟使能

      RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE) ; //´串口时钟使能

 

    GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP ;     //GPIO端口模式设置

    GPIO_InitStruct.GPIO_Pin = GPIO_Pin_9 ;

    GPIO_InitStruct.GPIO_Speed = GPIO_Speed_10MHz ;

    GPIO_Init(GPIOA,&GPIO_InitStruct) ;

    

    GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN_FLOATING ;     //GPIO端口模式设置

    GPIO_InitStruct.GPIO_Pin = GPIO_Pin_10 ;

    GPIO_InitStruct.GPIO_Speed = GPIO_Speed_10MHz ;

    GPIO_Init(GPIOA,&GPIO_InitStruct) ;

    

    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 ;

USART_InitStruct.USART_WordLength = USART_WordLength_8b ;

    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(void)

 {

      NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);    //系统中断优先级分配为2

      My_USART1_Init() ;

      while(1) ;

 }


打开串口调试助手调试:

成功运行

推荐阅读

史海拾趣

EETools公司的发展小趣事

随着技术的不断进步和市场的变化,EETools意识到必须不断创新才能保持竞争力。公司投入大量研发资源,对嵌入式开发工具进行技术升级和产品优化。经过数年的努力,EETools成功推出了一系列具有领先技术的嵌入式开发工具,如高性能的芯片编程器、智能调试器等。这些产品不仅提高了客户的工作效率,还降低了成本,赢得了市场的广泛认可。

Catalyst / ON Semiconductor公司的发展小趣事

随着电子行业的快速发展和市场竞争的加剧,Catalyst / ON Semiconductor公司面临着前所未有的挑战。为了应对这些变革,公司进行了一系列的转型和调整。公司优化了组织架构和管理流程,提高了运营效率;同时,公司还加大了对新兴技术的投入和研发力度,以适应市场的不断变化。

CQR SECURITY公司的发展小趣事

为了拓展业务范围和提升品牌影响力,CQR SECURITY公司开始实施国际化战略。公司积极开拓海外市场,与多个国家的电子企业建立了合作关系。同时,CQR还加强了与国际安全组织的交流与合作,共同推动全球网络安全水平的提升。通过国际化战略的成功实施,CQR不仅拓展了业务版图,还提升了自身的技术水平和国际竞争力。

E-CMOS(飞虹高科)公司的发展小趣事

随着全球化趋势的加剧,飞虹高科公司意识到,要想在国际市场上取得更大的成功,必须与国际同行展开合作。因此,公司积极寻求与国际知名企业的合作机会,通过技术合作、合资建厂等方式,共同开发新产品、拓展新市场。这些合作不仅为公司带来了资金和技术支持,还帮助公司扩大了国际影响力,提高了产品的国际竞争力。

Elcos AG公司的发展小趣事

随着全球对环保和可持续发展的重视,Elcos AG也开始注重自身的环保责任和可持续发展战略。公司采用环保材料和生产工艺,减少了对环境的污染和资源的浪费。同时,Elcos AG还积极参与社会公益事业和环保活动,通过捐款、赞助和志愿服务等方式回馈社会。这些举措不仅提升了公司的社会形象和品牌价值,也为公司的长期发展奠定了坚实的基础。

Cyrix Corp公司的发展小趣事

然而,Cyrix的发展并非一帆风顺。1997年,该公司被美国国民半导体公司收购。这一收购为Cyrix带来了新的机遇和挑战。在新的母公司旗下,Cyrix继续推出了一系列新的CPU产品,但市场竞争的激烈使得其面临巨大的压力。

问答坊 | AI 解惑

做研发的一点心得体会!

出来作研发也一年了,很有些体会。在这里想与大家分享下! 1. 不要把自己搞成“实验机器”,要多在课题开展前进行详细的课题论证,信息搜集和筛选。 企业一般做课题都很着急,课题进度要求很快,作为研发人员,要做大量的实验,筛选路线,打通 ...…

查看全部问答>

电子工程师启迪之——创造性与习惯相结合

人们可能会对电子产品的开发与设计方法坚持某种不变的观念,甚至对解决不同问题所采用的器件这样的小事都有某种思维定势,这是可以理解的。 我认识到,对于电子设计人员来说,“熟悉招致轻视”这样的说法并不适用于他们。甚至那些我所认识的最有创 ...…

查看全部问答>

请教ADC0809控制问题

程序如下;怎么ADC0809一直处于忙状态  (P[0..7]接D[0..7]P0接数码管) #include #define uchar unsigned char #define uint unsigned int uchar table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//数码管显示码0-9 ...…

查看全部问答>

如何把 51 单片机中的 .c 文件和 .h 文件 和 VC写的工程文件做成库

问题一: 在 51单片机 中用 C 写的 .c 和.h 文件,如何做成库呢?51的编译器是 IAR 问题二: 如何把VC写的一个 C 工程文件做成库呢? 问题三: 老大只说让我把上面这两种 C 语言写的函数和文件做成库,应该是做成 lib 库呢,还是做成 dll 库呢 ...…

查看全部问答>

高科技大型上市公司招聘: 嵌入式系统设计工程师 /通信产品设计工程师 / 系统软件设计工程师 工作地点 深圳

本公司是深圳一家高科技大型上市公司,主要经营电力系统产品生产研发,微电子产品生产研发,光磁设备,公司内有员工高层公寓,食堂,文体活动中心,员工家属楼多处,座落于美丽的深圳市福田区笔架山与莲花山之间,公司目前有员工6000多人,工程师及 ...…

查看全部问答>

wince 5中能否动态修改显示分辨率?

正在开发wince下的驱动,能否通过应用程序来动态调整TFT的分辨率?比如说从640x480调整到320x240,调整过程中WINCE不能重新启动? 我发现可以通过应用程序来进行屏幕旋转,有没有调整分辨率的函数? 谢谢…

查看全部问答>

DSP串口通讯

我最近也作了2407的串口实验,我的系统实钟采用外部15Mhz,锁相环采用4倍,安理来说外部实钟应该按照30Mhz计算,而且我串口采用9600 按照书上的计算方法,进行了寄存器配置。但是接收不到数据。         *SCICCR=0X0007; &nbs ...…

查看全部问答>

ModelSim6.5 KeyGen

ModelSim6.5 KeyGen   http://d.namipan.com/d/28d735fadc6867c49c730d5bed1ed47d448f7684102f0d00…

查看全部问答>

《CFL/LED照明驱动IC应用设计全攻略》电子书

助力绿色照明!《CFL/LED照明驱动IC应用设计全攻略》电子书正式发布!欢迎下载并传播! 星期一, 10/25/2010 - 08:18 — 创新网小编 传统照明企业在转向节能灯或者LED灯具生产后会面临一个严峻的挑战:就是从原来的强电领域转到弱电领域,要应对 ...…

查看全部问答>