STM32F429 串口通信_初始化

发布者:mancozc最新更新时间:2018-10-20 来源: eefocus关键字:STM32F429  串口通信  初始化 手机看文章 扫描二维码
随时随地手机看文章

一、相关原理:
1.    初始化HAL库;
2. 初始化stm32系统时钟,设置时钟,包括PLL时钟、以及外设时钟APB1,APB2.......
3. 初始化时延系统;
4. 初始化串口,包括串口、串口使用的GPIO口、使能串口本身的中断、使能串口在NVIC上对应的中断;

二、 代码实现:
1. 初始化HAL库
HAL_StatusTypeDef HAL_Init()
{
    HAL_NVIC_SetPriorityGrouping(NVIC_PRIORITYGROUP_2);

    HAL_InitTick(TICK_INT_PRIORITY);

    HAL_MspInit();
}

2. 时钟初始化
Stm32_Clock_Init(360,25,2,8);
void Stm32_Clock_Init(u32 plln,u32 pllm,u32 pllp,u32 pllq)
{
    HAL_StatusTypeDef ret = HAL_OK;
    RCC_OscInitTypeDef RCC_OscInitStructure;
    RCC_ClkInitTypeDef RCC_ClkInitStructure;

    __HAL_RCC_PWR_CLK_ENABLE()  //使能PWR时钟????
    __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);

    RCC_OscInitStructure.OscillatorType=RCC_OSCILLATORTYPE_HSE;    //时钟源为HSE
    RCC_OscInitStructure.HSEState=RCC_HSE_ON;                      //打开HSE
    RCC_OscInitStructure.PLL.PLLState=RCC_PLL_ON;//打开PLL
    RCC_OscInitStructure.PLL.PLLSource=RCC_PLLSOURCE_HSE;//PLL时钟源选择HSE
    RCC_OscInitStructure.PLL.PLLM=pllm; //主PLL和音频PLL分频系数(PLL之前的分频),取值范围:2~63.
    RCC_OscInitStructure.PLL.PLLN=plln; //主PLL倍频系数(PLL倍频),取值范围:64~432. 
    RCC_OscInitStructure.PLL.PLLP=pllp; //系统时钟的主PLL分频系数(PLL之后的分频),取值范围:2,4,6,8.(仅限这4个值!)
    RCC_OscInitStructure.PLL.PLLQ=pllq; //USB/SDIO/随机数产生器等的主PLL分频系数(PLL之后的分频),取值范围:2~15.
    ret=HAL_RCC_OscConfig(&RCC_OscInitStructure);//初始化

     if(ret!=HAL_OK) while(1);

     //选中PLL作为系统时钟源并且配置HCLK,PCLK1和PCLK2
    RCC_ClkInitStructure.ClockType=(RCC_CLOCKTYPE_SYSCLK|RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2);
    RCC_ClkInitStructure.SYSCLKSource=RCC_SYSCLKSOURCE_PLLCLK;//设置系统时钟时钟源为PLL
    RCC_ClkInitStructure.AHBCLKDivider=RCC_SYSCLK_DIV1;//AHB分频系数为1
    RCC_ClkInitStructure.APB1CLKDivider=RCC_HCLK_DIV4; //APB1分频系数为4
    RCC_ClkInitStructure.APB2CLKDivider=RCC_HCLK_DIV2; //APB2分频系数为2
    ret=HAL_RCC_ClockConfig(&RCC_ClkInitStructure,FLASH_LATENCY_5);//同时设置FLASH延时周期为5WS,也就是6个CPU周期。

    if(ret!=HAL_OK) while(1);
}

3. 初始化时延系统;
delay_init(180);
void delay_init(u8 SYSCLK)
{
    HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK);//SysTick频率为HCLK
    fac_us=SYSCLK;                        //不论是否使用OS,fac_us都需要使用
}                                   

4. 串口初始化
uart_init(115200);

//初始化IO 串口1
//bound:波特率
void uart_init(u32 bound)
{   
    //UART 初始化设置
    UART1_Handler.Instance=USART1;                        //USART1
    UART1_Handler.Init.BaudRate=bound;                    //波特率
    UART1_Handler.Init.WordLength=UART_WORDLENGTH_8B;   //字长为8位数据格式
    UART1_Handler.Init.StopBits=UART_STOPBITS_1;        //一个停止位
    UART1_Handler.Init.Parity=UART_PARITY_NONE;            //无奇偶校验位
    UART1_Handler.Init.HwFlowCtl=UART_HWCONTROL_NONE;   //无硬件流控
    UART1_Handler.Init.Mode=UART_MODE_TX_RX;            //收发模式
    HAL_UART_Init(&UART1_Handler);                        //HAL_UART_Init()会使能UART1
   
    HAL_UART_Receive_IT(&UART1_Handler, (u8 *)aRxBuffer, RXBUFFERSIZE);//该函数会开启接收中断:标志位UART_IT_RXNE,并且设置接收缓冲以及接收缓冲接收最大数据量
 
}

void HAL_UART_Init(UART1)
{
    HAL_UART_MspInit(UART1);
}



void HAL_UART_MspInit(UART_HandleTypeDef *huart)
{
    //GPIO端口设置
    GPIO_InitTypeDef GPIO_Initure;
   
    if(huart->Instance==USART1)//如果是串口1,进行串口1 MSP初始化
    {
        __HAL_RCC_GPIOA_CLK_ENABLE();            //使能GPIOA时钟
        __HAL_RCC_USART1_CLK_ENABLE();            //使能USART1时钟
   
        GPIO_Initure.Pin=GPIO_PIN_9;            //PA9
        GPIO_Initure.Mode=GPIO_MODE_AF_PP;        //复用推挽输出
        GPIO_Initure.Pull=GPIO_PULLUP;            //上拉
        GPIO_Initure.Speed=GPIO_SPEED_FAST;        //高速
        GPIO_Initure.Alternate=GPIO_AF7_USART1;    //复用为USART1
        HAL_GPIO_Init(GPIOA,&GPIO_Initure);           //初始化PA9

        GPIO_Initure.Pin=GPIO_PIN_10;            //PA10
        HAL_GPIO_Init(GPIOA,&GPIO_Initure);           //初始化PA10
       
       
        HAL_NVIC_EnableIRQ(USART1_IRQn);        //使能USART1中断通道
        HAL_NVIC_SetPriority(USART1_IRQn,3,3);    //抢占优先级3,子优先级3
#endif   
    }
}

关键字:STM32F429  串口通信  初始化 引用地址:STM32F429 串口通信_初始化

上一篇:STM32F105VC SPI3的重映射使用
下一篇:stm32中AMBA、AHB、APB总系介绍

推荐阅读最新更新时间:2024-03-16 16:17

51单片机IO口模拟UART串口通信
#include reg52.h #include main.h #include smartcard.h #include stdio.h typedef enum { false, true }bool; #if 0 sbit PIN_RXD = P1^0; //接收发送同一个引脚定义 sbit PIN_TXD = P1^0; //接收发送同一个发送引脚定义 sbit PIN_CLK = P3^1; //智能卡时钟引脚定义 sbit PIN_3v5v = P3^2; //智能卡3v_5v引脚定义 sbit PIN_RST = P3^3; //智能卡复位引脚定义 sbit PIN_CMDVCC = P3^4; //智能卡CMD
[单片机]
STM32串口通信——16进制数形式
一.为什么采用16进制数形式? 首先,需要解释一下串口发送的数据都是unsigned char类型的,说成字符和16进制形式,只是我们采用何种方式展示这些数据。字符形式就是把16进制数通过ASCII表一个一个转成字符的。 一开始接触到的串口程序,就是字符形式的,尤其是STM32中被重构的printf()函数,我就先入为主地选择了字符形式。这样比较人性化,因为啥数据都是平时看到的字符,很直观,但是大大降低了通信效率!比如要发送一个数85,字符形式需要发送’8’+‘5’,而16进制只需要发送0x55。还有一点是负数,字符形式多加了一个’-'号,16进制直接发送有符号数就行了。如果要传输大量的数据,应该采用16进制形式。
[单片机]
avr单片机外部中断0,1,2初始化配置及说明
#include iom16v.h #include macros.h /*1.状态寄存器SREG bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0 I T H S V N Z C I:全局中断使能位。 在I置位后,单独的中断使能由不同的中断寄存器控制。若I为0,则禁止中断。 MCU 控制寄存器- MCUCR MCU 控制寄存器包含中断触发控制位与通用 MCU 功能 Bit 7 6 5 4 3 2 1 0 SM2 SE SM1 SM0
[单片机]
FPGA和单片机的串行通信接口设计
1 前言 现场可编程逻辑器件(FPGA)在高速采集系统中的应用越来越广,由于FPGA对采集到的数据的处理能力比较差,故需要将其采集到的数据送到其他CPU系统来实现数据的处理功能,这就使FPGA系统与其他CPU系统之间的数据通信提到日程上,得到人们的急切关注。本文介绍利用VHDL语言实现 FPGA与单片机的串口异步通信电路。 整个设计采用模块化的设计思想,可分为四个模块:FPGA数据发送模块,FPGA波特率发生控制模块,FPGA总体接口模块以及单片机数据接收模块。本文着重对FPGA数据发送模块实现进行说明。 2 FPGA数据发送模块的设计 根据RS232 异步串行通信来的帧格式,在FPGA发送模块中采用的每一帧格
[嵌入式]
STM32l151低功耗芯片串口通信
参考原子的stm32f系列的串口通信实验,移植到stm23l系列的程序代码。 1、采用串口中断方式,串口接收到消息产生中断,因此需要使能RXNE寄存器。HAL库函数的调用方式是__HAL_UART_ENABLE_IT(&UartHandle1, UART_IT_RXNE); UartHandle1是UART_HandleTypeDef类型,具体参考stm32lxx_hal_uart.h文件。 2、关于串口初始化,由于HAL库中的串口初始化函数HAL_UART_Init();会调用HAL_UART_MspInit();后者是一个关于串口1和串口2的I/O端口模式选择及初始化的函数。 为了使程序能顺利进入中
[单片机]
stm32初始化流程图解析
  STM32系列基于专为要求高性能、低成本、低功耗的嵌入式应用专门设计的ARM Cortex-M3内核。   stm32参数:   12V-36V供电   兼容5V的I/O管脚   优异的安全时钟模式   带唤醒功能的低功耗模式   内部RC振荡器   内嵌复位电路   工作温度范围:-40°C至+85°C或105°C   stm32特点:   内核:ARM32位Cortex-M3 CPU,最高工作频率72MHz,1.25DMIPS/MHz。单周期乘法和硬件除法。   存储器:片上集成32-512KB的Flash存储器。6-64KB的SRAM存储器。时钟、复位和电源管理:2.0-3.6V的电源供电和I/O接口的驱动电压。上电
[单片机]
stm32<font color='red'>初始化</font>流程图解析
基于ARM的硬件启动程序设计-初始化堆栈
ARM有7种运行状态,每一种状态的堆栈指针寄存器(SP)都是独立的。所以,对于程序中需要用的每一种 处理器模式,都要给SP定义一个堆栈地址。流程为:修改状态寄存器内的状态位,使处理器切换到需要的模式,然后给SP赋值。需要注意的是:不要切换到 User模式进行该模式下的堆栈设置,因为进入User模式后就不能再操作CPSR返回到其他模式了。 先定义各种模式对应的CPSR寄存器M 的值,该值决定了进入何种模式,可参考相关数据手册。 Mode_USR EQU 0x10 Mode_FIQ EQU 0x11 Mode_IRQ EQU 0x12 Mode_SVC EQU 0x13 Mode_ABT
[单片机]
基于嵌入式WinCE与MSP430单片机多串口通信设计
摘要:在远程监控和工业自动化系统中,串口通信因其具有连接简单、使用方便、可靠性高的优点,得到越来越广泛的应用。讨论了采用WinCE嵌入式与MSP430单片机构建串口多机通信系统的问题,在分析了WinCE操作系统与MSP430单片机串口模块特性的基础上,给出了进行串口通信的总体框图,针对实际串口通信存在的问题制定串行通信协议,然后在该系统硬件基础上根据需要定制WinCE系统内核,最后实现串口通信设计。实验结果表明:该系统能够达到多串口通信的要求。 关键词:WinCE;MSP430;TCP/IP;串口通信协议 目前WinCE嵌入式与MSP430单片机在仪器仪表、工业控制、移动设备等有着广泛的应用。在很多复杂的应用场合比如多点温
[工业控制]
基于嵌入式WinCE与MSP430单片机多<font color='red'>串口通信</font>设计
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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