STM32串口1,2,3初始化函数代码(标准库版)

发布者:信息巫师最新更新时间:2022-10-08 来源: csdn关键字:STM32  串口  初始化函数 手机看文章 扫描二维码
随时随地手机看文章

没有使用中断
cks32C8T6、stm32c8t6直接复制使用
其他芯片注意引脚,复用功能什么的


串口1初始化代码

//串口1

void Uart1_init(u32 bound){

  //GPIO端口设置

  GPIO_InitTypeDef GPIO_InitStructure;

  USART_InitTypeDef USART_InitStructure;

  RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1|RCC_APB2Periph_GPIOA, ENABLE); //使能USART1,GPIOA时钟

  //USART1_TX   GPIOA.9

  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; //PA.9

  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用推挽输出

  GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化GPIOA.9

   //USART1_RX   GPIOA.10初始化

    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;//PA10

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

    GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化GPIOA.10    

   //USART 初始化设置

USART_InitStructure.USART_BaudRate = bound;//串口波特率

USART_InitStructure.USART_WordLength = USART_WordLength_8b;//字长为8位数据格式

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_Rx | USART_Mode_Tx; //收发模式

USART_Init(USART1, &USART_InitStructure); //初始化串口1

//USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);//开启串口接受中断

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

}


串口2初始化代码

void Usart2_Init(u32 bound)

{

    GPIO_InitTypeDef GPIO_InitStructure;    

    USART_InitTypeDef USART_InitStructure;     

       /*config USART clock*/  

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_AFIO,ENABLE);   

    RCC_APB1PeriphClockCmd( RCC_APB1Periph_USART2,ENABLE);  

       /*USART1 GPIO config*/     

    GPIO_InitStructure.GPIO_Pin= GPIO_Pin_2;    

    GPIO_InitStructure.GPIO_Mode= GPIO_Mode_AF_PP; //复用推挽输出    

    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;    

    GPIO_Init(GPIOA,&GPIO_InitStructure);    

      GPIO_InitStructure.GPIO_Pin= GPIO_Pin_3;    

    GPIO_InitStructure.GPIO_Mode= GPIO_Mode_IN_FLOATING;  //复用开漏输入    

    GPIO_Init(GPIOA,&GPIO_InitStructure);   

       /*USART1 mode Config*/     

    USART_InitStructure.USART_BaudRate = bound;  

    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_Rx | USART_Mode_Tx;  

    USART_Init(USART2,&USART_InitStructure);  

    USART_Cmd(USART2,ENABLE);   

}


串口3初始化代码

void USART3_Init(u32 baud)

{

    USART_InitTypeDef USART_InitStructure;

    GPIO_InitTypeDef GPIO_InitStructure;    //声明一个结构体变量,用来初始化GPIO

    //使能串口的RCC时钟

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB , ENABLE); //使能UART3所在GPIOB的时钟

    RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3, ENABLE);


    //串口使用的GPIO口配置

    // Configure USART3 Rx (PB.11) as input floating

    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;

    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;

    GPIO_Init(GPIOB, &GPIO_InitStructure);


    // Configure USART3 Tx (PB.10) as alternate function push-pull

    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;

    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;

    GPIO_Init(GPIOB, &GPIO_InitStructure);


    //配置串口

    USART_InitStructure.USART_BaudRate = baud;

    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_Rx | USART_Mode_Tx;



    // Configure USART3

    USART_Init(USART3, &USART_InitStructure);//配置串口3

    // Enable the USART3

    USART_Cmd(USART3, ENABLE);//使能串口3

}

关键字:STM32  串口  初始化函数 引用地址:STM32串口1,2,3初始化函数代码(标准库版)

上一篇:STM32字符串打印
下一篇:STM32的uart1、uart2、uart3重定向函数(标准库版)

推荐阅读最新更新时间:2024-11-09 11:51

msp430 f5529寄存器 串口发送接收
使用的开发板是官方的ti msp430f5529lp 基于官方的例程进行的改动 新增了发送字符串函数 同时可以中断接收 接下来看代码展示 #include msp430.h volatile unsigned int i; void senfchar(char s) { UCA0TXBUF=s; while(!(UCA0IFG&UCTXIFG)); } void sendstring(unsigned char *p) { while(*p!='') { while(!(UCA0IFG&UCTXIFG)); UCA0TXBUF=*p++; } } void
[单片机]
msp430 f5529寄存器 <font color='red'>串口</font>发送接收
STM32 MCU通过STM32CubeMx配置NVIC怎么没有中断子优先级选项
1、使用CubeMx配置NVIC时为何不见子优先级选项? 有些STM32用户,尤其是那些用过基于ARM Cortx-M3/M4/M7内核的STM32 MCU的用户,在使用基于M0/M0+内核的STM32系列并通过STM32CubeMx进行NVIC配置时,不难发现一个问题,那就是怎么没有中断子优先级【或称响应优先级、副优先级等】的配置?!【当然,很多时候我们或许没有关注子优先级】如下图所示,只看到抢占优先级的配置,看不到子优先级的配置项。 上图是我基于STM32L0系列芯片的配置,该系列芯片是基于ARM Cortex-M0+内核的。我们再看看下图的NVIC配置页面,显然可以看到抢占优先级【PreemptionPriority】和
[单片机]
<font color='red'>STM32</font> MCU通过STM32CubeMx配置NVIC怎么没有中断子优先级选项
玩转STM32(14)运行第一行代码
前面学习了选择从那里进行加载代码,接着下来,我们将要了解CPU是怎么样运行编译的代码。通过前面的学习,我们知道通过编译器的编译,会生成可运行的代码,然后通过JLINK下载到STM32的FLASH里,再通过配置CPU的引导管脚,实现选择内部FLASH来加载代码。但是CPU是怎么样来加载代码,并运行的呢? 其实不同类型的CPU运行代码的方式不一样,STM32的运行方式是这样的,CPU 将从地址 0x0000 0000 获取栈顶值,然后从始于 0x0000 0004 的自举存储器开始执行代码。前面已经把0x800 0000的FLASH地址配置为启动的存储器,因此就会从这里偏移位置0取得栈顶值,从偏移位置4取得第一行执行代码。根据这个
[单片机]
玩转<font color='red'>STM32</font>(14)运行第一行代码
stm32和电机开发(直流有刷电机和步进电机)
很多的课程都喜欢把电机原理完完整整讲一遍。但是对于控制的同学,这部分内容是否真的需要值得商榷。做电机控制,大部分都是在学了stm32之类的mcu之后才开始进行的。这部分,不如按照个人认知习惯去学习或许效率更高。 1、直流有刷电机和步进电机 虽然直流无刷电机bldc、pmsm这两类电机似乎更有技术含量一点,但是从学习角度来说,直流有刷电机和步进电机是最合适的。说到直流有刷电机,大家可以把它想象成小时候玩具上的电机。上面会有一个正负极,分别连接在电源两侧。如果是正着接,那么电机就正转;如果反着接,就反转。 步进电机,看的比较多的是二相四线步进电机,可以简单看成两对正负线。如果要步进电机转起来,只需要定时给一定数量的方波即可。比
[单片机]
<font color='red'>stm32</font>和电机开发(直流有刷电机和步进电机)
STM32单片机中断详解
中断,在单片机中占有非常重要的地位。代码默认地从上向下执行,遇到条件或者其他语句,会按照指定的地方跳转。而在单片机执行代码的过程中,难免会有一些突发的情况需要处理,这样就会打断当前的代码,待处理完突发情况之后,程序会回到被打断的地方继续执行。 1 EXTI控制器 外部中断/事件控制器(EXTI)管理了控制器的 23 个中断/事件线。每个中断/事件线都对应有一个边沿检测器,可以实现输入信号的上升沿检测和下降沿的检测。EXTI 可以实现对每个中断/事件线进行单独配置,可以单独配置为中断或者事件,以及触发事件的属性。 外部信号进入经过1的边沿检测电路,检测是否符合(有2和3的上升沿和下降沿选择寄存器决定),产生信号,然后和4软件
[单片机]
<font color='red'>STM32</font>单片机中断详解
JZ2440串口打印字符作为调试
/* * 初始化UART0 * 57600,8N1,无流控 */ void uart0_init(void) { GPHCON |= 0xa0; // GPH2,GPH3用作TXD0,RXD0 GPHUP = 0x0c; // GPH2,GPH3内部上拉 ULCON0 = 0x03; // 8N1(8个数据位,无较验,1个停止位) UCON0 = 0x05; // 查询方式,UART时钟源为PCLK UFCON0 = 0x00; // 不使用FIFO UMCON0 = 0x00; // 不使用流控 UBRDIV0 = UART_BRD; // 波特率为115200 }
[单片机]
基于STM32设计的酒驾报警系统
1. 前言 随着社会的发展和人们生活水平的提高,汽车已经成为人们出行的主要代步工具,与此同时,酒后驾车所引发的事故越来越多,对人们的生命安全带来了威胁。为了控制酒后驾车,本文设计了一款能够安装在车辆驾驶室内的酒后驾车监测系统。 系统主控芯片采用STM32,采用酒精传感器采集数据进行分析,如果发现酒精超标,会通过GPRS模块向指定的手机号码发送提醒短信;系统还带了一块LCD显示屏,可以实时显示检测的酒精含量,酒精超标后,本地蜂鸣器也会发出警报,提醒驾驶员。 测量酒驾的标准是: (1)饮酒驾车是指车辆驾驶人员血液中的酒精含量大于或者等于20mg/100ml,小于80mg/100ml的驾驶行为。(2)醉酒驾车是指车辆驾驶人员
[单片机]
基于<font color='red'>STM32</font>设计的酒驾报警系统
STM32各个系列时钟调高时出现异常案例
STM32用户反馈,使用STM32F103内部时钟,把系统时钟配置成64MHz单片机就不跑了,配置成36MHz程序就正常妥妥的,频率稍高点就容易导致死机。他贴出的代码如下:void RCC_Configuration(void) { RCC_DeInit();//将外设 RCC寄存器重设为缺省值 RCC_HSICmd(ENABLE);//使能HSI while(RCC_GetFlagStatus(RCC_FLAG_HSIRDY) == RESET);//等待HSI使能成功 //FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable); //FLASH_SetLatency(FLASH
[单片机]
<font color='red'>STM32</font>各个系列时钟调高时出现异常案例
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved