历史上的今天
返回首页

历史上的今天

今天是:2024年09月05日(星期四)

正在发生

2019年09月05日 | STM32串口通信(一)

2019-09-05 来源:eefocus

关于STM32串口通信USART的一些个人浅见:


1:对STM32中文数据手册解读之后,相信大家对USART串行通信有些了解,学习51的时候也都接触过,使用串口只要弄明白原理就很简单了


发送和接收数据的过程从图上可以直观的看出

USART串口通信涉及到几个重要的寄存器


 1:)状态寄存器

2)数据寄存器


 

3)波特比率寄存器


 

例:若要设置比特率为9600,那么DIV就是468.75,则此寄存器的高12位应存值:468,低4位存值:0.75*16=12(十进制小数换算成十六进制小数);最后将整数和小数拼接:BRR=468<<4+12;(详细过程可参照源代码;)


4)控制寄存器1:

5)控制寄存器2:


主要配置停止位,时钟极性,时钟使能


6)控制寄存器3:


 涉及到硬件流控制,DMA配置等


发送数据:

接收数据:

相关程序:


中断函数:


void USART1_IRQHandler(void)

 {

        static u8 ch; 

        USART_ClearFlag(USART1 , USART_FLAG_TC);  


if(USART_GetITStatus(USART1, USART_IT_RXNE) != Bit_RESET)

{


       ch=USART_ReceiveData(USART1);

            while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == Bit_RESET);                                                        USART_SendData(USART1, ch);     

            while(USART_GetFlagStatus(USART1, USART_FLAG_TC));   

}

 }

主程序:


int main()

{

 usart_init();

  while(1);

}


配置程序:


void usart_init()

{


  GPIO_InitTypeDef  GPIO_InitStructure;

  USART_InitTypeDef USART_InitStructure;

  NVIC_InitTypeDef NVIC_InitStructure;

  USART_DeInit(USART1);


    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOC|RCC_APB2Periph_AFIO|RCC_APB2Periph_USART1,ENABLE);  



 GPIO_InitStructure.GPIO_Pin=GPIO_Pin_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;         

GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;

GPIO_Init(GPIOA,&GPIO_InitStructure);


USART_InitStructure.USART_BaudRate = 9600;           

USART_InitStructure.USART_WordLength = USART_WordLength_8b;

USART_InitStructure.USART_StopBits = USART_StopBits_1;    

USART_InitStructure.USART_Parity = USART_Parity_No;        

USART_InitStructure.USART_HardwareFlowControl =

USART_HardwareFlowControl_None;                        

USART_InitStructure.USART_Mode = USART_Mode_Tx | USART_Mode_Rx;

USART_Init(USART1, &USART_InitStructure);


USART_Cmd(USART1, ENABLE);    


USART_ITConfig (USART1,USART_IT_RXNE,ENABLE);   


USART_ClearFlag(USART1,USART_FLAG_TC);

 

NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0); 


 NVIC_InitStructure.NVIC_IRQChannel=USART1_IRQn;

 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=1;

 NVIC_InitStructure.NVIC_IRQChannelSubPriority=0;

 NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;

 NVIC_Init(&NVIC_InitStructure); 

}


(以上内容均为个人浅见,如有不恰之处,请指正,谢谢!)

推荐阅读

史海拾趣

Arima Lasers Corp公司的发展小趣事

Arima Lasers Corp的初期,是一个典型的初创企业,面临着资金短缺和技术难题的双重压力。然而,公司的研发团队在激光技术方面取得了重大突破,成功开发出一种新型的激光发射器,具有更高的功率和更稳定的性能。这一技术突破不仅吸引了投资者的关注,也为公司在市场上赢得了初步的声誉。随着产品的不断迭代和优化,Arima Lasers Corp逐渐在激光行业中占据了一席之地。

AITSEMI公司的发展小趣事

随着全球化趋势的加剧,AITSEMI公司开始实施全球化战略,积极开拓海外市场。通过设立海外分支机构、参加国际展会等方式,AITSEMI成功将产品推广至全球范围,并赢得了广泛的国际认可。同时,公司还加大了品牌建设的力度,通过广告宣传、社交媒体推广等方式提升品牌影响力,进一步巩固了公司在全球电子行业的领先地位。

这些故事基于AITSEMI公司的公开资料和发展历程进行编写,旨在展示其在电子行业中的成长和发展。然而,由于公司具体的发展过程可能涉及更多的细节和未公开的信息,因此这些故事可能并不完全准确或详尽。如需更详细和准确的信息,建议直接访问AITSEMI公司的官方网站或查阅相关新闻报道。

CTC Coils Ltd公司的发展小趣事

CTC Coils Ltd公司早期以生产传统电感线圈为主,随着电子技术的飞速发展,公司意识到必须进行技术升级。于是,公司投入大量研发资源,成功开发出一种新型高效能电感线圈,该产品在性能上大幅提升,同时降低了能耗。这一技术突破使CTC Coils Ltd的产品在市场上脱颖而出,公司迅速赢得了大量客户,并扩大了生产规模。

Datatronic公司的发展小趣事

随着全球化趋势的加速,Datatronic公司开始将目光投向国际市场。公司通过参加国际展览、设立海外办事处等方式,积极拓展海外市场。同时,公司还加强了与国际企业的合作,引进先进的技术和管理经验。这些努力使得Datatronic公司在国际市场上逐渐获得了认可,品牌影响力得到了提升。

Dexter Research Center Inc公司的发展小趣事

随着业务的不断发展,Dexter开始积极拓展市场。公司首先将目光投向了国内市场,通过深入了解客户需求,提供定制化的解决方案,成功占领了国内市场的一定份额。随后,Dexter又将目光转向了国际市场。通过参加国际展会、拓展海外销售渠道等方式,Dexter成功打入了欧美、亚洲等多个国家和地区的市场。全球化战略为Dexter带来了更广阔的发展空间和市场机遇。

Horn公司的发展小趣事

随着汽车、通用工程、液压/气动、珠宝和医疗设备等行业对高精度切削工具需求的增长,Horn公司不断加大研发投入。公司成功开发出超硬切削材料如单晶金刚石(MCD)、多晶金刚石(PCD)和立方氮化硼(PCBN),这些材料的应用极大地提高了切削效率和加工精度。Horn公司的技术创新不仅满足了市场对高质量刀具的需求,还推动了整个切削工具行业的进步。

问答坊 | AI 解惑

请问POCKETPC2003SDK中有ARMV4I吗 我下的好像只有ARMV4

请问POCKETPC2003SDK中有ARMV4I吗   我下的好像只有ARMV4 各位多多帮忙…

查看全部问答>

恶搞的flash游戏“飞鞋打布什”

http://www.e8page.cn/shtml/xiaohua_523_1400.html 呵呵, 2008年12月14日,伊拉克记者扎伊迪在招待会上向布什扔出自己的鞋子,并高声辱骂布什。凭借此举扎伊迪一夜成名,成为整个阿拉伯世界的“斗士”。 不失时机的游戏开发者们立刻制作这款F ...…

查看全部问答>

wince下 调用软键盘的问题

想做一个在搜索对话框弹出时自动跳出软键盘的功能 想用SipEnumIM获取输如法信息 然后用取得的CLSID值调用SipSetCurrentIM设置当前输入法信息 最后用SipShowIM显示输入法的软键盘, 不会写api相关的代码,向大家请教,…

查看全部问答>

跪求 单片机软件仿真系统源代码 谢谢

跪求 单片机软件仿真系统源代码 谢谢…

查看全部问答>

FPGA的书籍

 获奖的FPGA那两本书籍还没到呢??不知道啥时候能到啊!…

查看全部问答>

TWI仿真正确,实际电路时数据不正确

为什么我的中断方式的TWI总线的双机通讯(两片MEGA48)在proteus下仿真时数据是正确的,下载到单片机时,接收到的数据就不正确呢,TWI波特率50K,100K,20K都试过,现象一样。 主机发送00~FF,从机收到的是00,02,04,08,10,12。。。。。。。 搞不懂啊 ...…

查看全部问答>

2812搜查令+TMS320F2812 SCI口FLASH编程操作指南

TMS320F2812 SCI口FLASH编程操作指南 对于掌握编程很有帮助 [ 本帖最后由 hangsky 于 2011-11-8 13:37 编辑 ]…

查看全部问答>

j基于单片机的开根号

因为各种的需要,有时可能需要在单片机上开根号。下面是在网上找到的方法,与大家分享。     1.原理 用pow(X,Y)表示X的Y次幂,用B[0],B[1],...,B[m-1]表示一个序列, 其中[x]为下标。 假设:    B[x],b[x]都是二进制序 ...…

查看全部问答>

STM32 中断系统

STM32的中断函数应该怎样写 要产生一个USART2 发送寄存器空的中断 然后在中断函数里面写  让IO口LED亮 有没有个模板 不知道怎么写 哦、谢谢了…

查看全部问答>

得铁电开发板

第1次答卷阅卷:MSP挑战级(高级) 总分是多少啊? 我前5个对了,就有20分了,后面好像没加分啊…

查看全部问答>