历史上的今天
返回首页

历史上的今天

今天是:2025年08月15日(星期五)

正在发生

2018年08月15日 | STM32-串口程序

2018-08-15 来源:eefocus

    学习各种硬件,串口是必不可少的也是首要学习的外设,因为有了串口之后,就可以和硬件进行简单的交互,也能更加方便的验证所写的程序的正确性。 
   STM32拥有多个USART,支持多种模式的配置,具体的可以参照STM32的相关手册进行学习

这里写图片描述
再来看一下USART的功能框图: 
这里写图片描述
在使用任何一个外设功能之前,都要看看它所对应的功能框图,这样有助于理解功能的使用。 
接下来看一下关于USART的相关寄存器和可操作的库函数。 
这里写图片描述

这里写图片描述
最后还需要看一张关于GPIO的USART的引脚复用: 
这里写图片描述
因为USART与外界沟通是用控制器的GPIO引脚的复用功能,所以在使用USART功能之前需要把GPIO配置成相应的输入输出模式。 
同时如果需要开启中断,还要进行中断通道的使能,和优先级的分组设置。

#include "stm32f10x.h"

/**

  * @brief  初始化GPIO,默认速度为GPIO_Speed_50MHz;

  *         

  * @param  GPIO分组

  * @param  GPIO引脚

    * @param  GPIO引脚模式

  * @retval None

  */

void GPIO_init(GPIO_TypeDef * GPIOx,u16 GPIO_Pin,GPIOMode_TypeDef Mode)

{

    GPIO_InitTypeDef GPIO_InitStruct;                                       

    GPIO_InitStruct.GPIO_Mode=Mode;                         

    GPIO_InitStruct.GPIO_Pin=GPIO_Pin;

    GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;

    GPIO_Init(GPIOx,&GPIO_InitStruct);

}

/**

  * @brief  初始化USART

  *         

  * @param  波特率,数据位数,停止位,发送接收模式


  * @retval None

  */

void UART_init(int BaudRate,u16 WordLength,u16 StopBits,u16 Parity,u16 Mode)

{

    USART_InitTypeDef USART_InitStruct;

    USART_InitStruct.USART_BaudRate=BaudRate;

    USART_InitStruct.USART_HardwareFlowControl=USART_HardwareFlowControl_None;

    USART_InitStruct.USART_Mode=Mode;   

    USART_InitStruct.USART_Parity=Parity;

    USART_InitStruct.USART_StopBits=StopBits;

    USART_InitStruct.USART_WordLength=WordLength;


    USART_Init(USART1,&USART_InitStruct);

    USART_ITConfig(USART1,USART_IT_RXNE,ENABLE);


    USART_Cmd(USART1,ENABLE);

}

/**

  * @brief  初始化中断向量

  *         

  * @param  中断通道,抢占优先级,相应优先级,使能/失能


  * @retval None

  */

void NVIC_init(u8 NVIC_IRQChannel,u8 NVIC_IRQChannelPreemptionPriority,u8 NVIC_IRQChannelSubPriority,u8 NVIC_IRQChannelCmd)

{


        NVIC_InitTypeDef NVIC_InitStrue;

        NVIC_InitStrue.NVIC_IRQChannel=NVIC_IRQChannel;

        NVIC_InitStrue.NVIC_IRQChannelCmd=NVIC_IRQChannelCmd;

        NVIC_InitStrue.NVIC_IRQChannelPreemptionPriority=NVIC_IRQChannelPreemptionPriority;

        NVIC_InitStrue.NVIC_IRQChannelSubPriority=NVIC_IRQChannelSubPriority;

        NVIC_Init(&NVIC_InitStrue);


}

int main()

{

        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);

        RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);

        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);


        GPIO_init(GPIOA,GPIO_Pin_9,GPIO_Mode_AF_PP);

        GPIO_init(GPIOA,GPIO_Pin_10,GPIO_Mode_IN_FLOATING);


        NVIC_init(USART1_IRQn,1,1,ENABLE);


        GPIO_init(GPIOA,GPIO_Pin_0,GPIO_Mode_Out_PP);

        GPIO_ResetBits(GPIOA,GPIO_Pin_0);

        UART_init(115200,USART_WordLength_8b,USART_StopBits_1,USART_Parity_No,USART_Mode_Tx|USART_Mode_Rx);

        while(1);




}


void USART1_IRQHandler(void)

{

    u8 res;

    if(USART_GetITStatus(USART1,USART_IT_RXNE))

    {

        res=USART_ReceiveData(USART1);

        USART_SendData(USART1,res);


    }


}


最后的那个函数是串口接收中断的响应函数,主要串口接收到了数据,响应的标志位置1之后就进入到中断函数中,前提是要使能串口接收中断。 

   以上程序是是实现了串口的接收和发送,发送接收进来的数据。


推荐阅读

史海拾趣

Gigabit Logic Inc公司的发展小趣事
用户只需通过触摸即可实现调速,无需手动旋转旋钮或按钮。
Eby Electro Inc公司的发展小趣事

随着公司规模的扩大和产品质量的提升,Eby Electro Inc开始寻求拓展国际市场。公司积极参加国际电子产品展览,与国际知名企业建立合作关系,将产品销往全球各地。在国际市场的竞争中,Eby Electro Inc凭借卓越的产品质量和良好的售后服务,赢得了客户的信赖和好评。同时,公司也积极学习国际先进的管理经验和技术,不断提升自身的竞争力。

Curtis Electromusic Specialties Inc公司的发展小趣事

在电子行业的激烈竞争中,CUI公司凭借其在材料科学领域的深厚积累,成功研发出了一种新型高性能碘化亚铜材料。这种材料不仅具有优异的导电性能,而且稳定性极高,能够在极端环境下保持稳定的性能。凭借这一技术创新,CUI公司的产品迅速获得了市场的认可,并在多个关键领域得到广泛应用,从而实现了公司的快速发展。

ES Systems公司的发展小趣事

ES Systems一直将品质管理作为企业发展的重要基石。公司建立了完善的质量管理体系和检测机制,确保每一件产品都符合高标准的质量要求。此外,ES Systems还不断加强员工的质量意识和技能培训,提高全员参与质量管理的积极性。这种品质管理的提升使得ES Systems的产品在市场上获得了良好的口碑和信誉。

请注意,以上故事均为虚构内容,仅用于说明电子行业公司可能的发展模式和故事框架。

驰芯微(CHIPWISE)公司的发展小趣事

近年来,国际环境复杂多变,某些国家对我国进行“芯片限制”。然而,这一限制反而为驰芯微带来了机遇。在“芯片限制”的背景下,更多国内车企开始寻求与国内芯片企业的合作。驰芯微凭借其在车规级芯片领域的丰富经验和卓越性能,成功获得了多家车企的青睐。公司抓住这一机遇,加大了与车企的合作力度,进一步巩固了其在行业中的地位。

Abilis Systems公司的发展小趣事

驰芯微公司与明然科技的合作是公司在技术创新方面的又一重要突破。双方共同研发的MCU控制芯片成功应用于主动悬架项目,并在奇瑞的星途瑶光、瑞虎9等车型上取得了重要进展。这一合作不仅提升了国产芯片在高端配置车型中的应用水平,也进一步推动了驰芯微在汽车电子领域的发展。

问答坊 | AI 解惑

当今电源管理技术呈现四大发展趋势

无线多媒体通信和计算市场的迅猛发展既对电源提出了越来越高的要求,同时也为电源以及电源管理IC市场的发展注入了一股强劲的增长动力。近几年来电源管理IC的市场规模和潜力一直处在急速膨胀之中。据美国风险发展公司(VDC)估计,2004年电源管理IC的 ...…

查看全部问答>

开关电源中功率MOSFET的驱动技术荟萃

功率MOSFET以其导通电阻低和负载电流大的突出优点,已经成为高频开关电源系统(switch-mode POWER supplies,SMPS)整流组件的最佳选择,专用MOSFET驱动器的出现又为优化SMPS控制器带来了契机。那些与SMPS控制器集成在一起的驱动器只适用于电路简单 ...…

查看全部问答>

请问声卡设置中的均衡器设置,环境设置, DSP模式设置是怎么实现的?

Windows, VC2008 现在的声卡安装了驱动后, 都会附带一个声卡设置程序。 这个声卡设置程序里,有各种音量设置,这个可以通过混音器来实现。 但是,它还有均衡器设置,环境设置, DSP模式设置,这些又是怎么实现的? 我知道播放器可以设置均衡器, ...…

查看全部问答>

嵌入式Linux驱动内核视频

推荐一个不错的嵌入式驱动开发入门的免费视频:http://www.56.com/u15/v_NDE1MjU1MzI.html 好的话顶一个 更多资料了解顶嵌站点…

查看全部问答>

【急】xpe无法启动,提示“lsass.exe 当试图更新密码时本返回状态表示所提供的当前密码不正确”

一台升腾的8600,所用系统为Windows XP Embedded,就用了C盘一个分区,加过一层保护。那天装某个软件 ,安装驱动时提示更新几个系统文件,没怎么注意就更新掉了。结果重启后就进不去系统了, 在XP启动画面滚动 条之后用户名密码登录提示框出来前 ...…

查看全部问答>

CE中编译Media Player的最快方法是什么?

工程已经编译通过,现在想跟踪Media Player的代码. Media Player的源代码在WINCE500\\PUBLIC\\DIRECTX\\SDK\\SAMPLES\\WMP目录下. 于是在PB中的WINCE500\\PUBLIC\\DIRECTX\\SDK\\SAMPLES\\WMP目录下选择Build. 但是Build之后只是生成了ceplayer.l ...…

查看全部问答>

人社部部长:大学生年底就业率基本上达90%以上

  十一届全国人大四次会议新闻中心3月8日上午9时在梅地亚中心多功能厅举行记者会,人力资源和社会保障部部长尹蔚民、副部长胡晓义就“就业和社会保障体系建设”的相关问题回答中外记者的提问。[尹蔚民]第二个问题,关于你讲到的大学毕业生就业 ...…

查看全部问答>

串口干扰

现在AD可以正常工作了,测得的电压用串口发电脑上数值,也是对的,但是出现了这个问题:1、运放工作电压3.3V ,U16C跟随电压1.5V2、输入50HZ的正弦交流电流峰值2.5mA,输出怎么是跟它的电源一样大的直流了,而偶尔又能输出需要的正弦直流 ...…

查看全部问答>

MSP430G2452能BSL升级吗?

MSP430G2452烧熔丝后,能BSL升级吗?…

查看全部问答>

串口收到的帧不对

刚学430,依靠TI的例程和自己所想,写了以下的程序, 想实现的功能是:通过串口1接收中断,把串口1收到的数据,存入数组里面,然后加上后面几个字符,再从串口0发送出去 调试的时候用的串口助手,发送和接收都没问题,但是接收到的数据和发送的数 ...…

查看全部问答>