历史上的今天
返回首页

历史上的今天

今天是:2024年10月20日(星期日)

正在发生

2018年10月20日 | STM32F429 串口通信_初始化

2018-10-20 来源:eefocus

一、相关原理:
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   
    }
}

推荐阅读

史海拾趣

ELECTRONIC ASSEMBLY公司的发展小趣事

在电子产业的浪潮中,一家名为“智汇电子组装”的初创公司凭借其独特的技术优势迅速崛起。公司创始人是一位资深的电子工程师,他带领着一支由多名技术精英组成的团队,专注于研发高效、精确的电子组装技术。通过不断创新和优化,智汇电子组装成功开发出一套自动化组装设备,大大提高了生产效率,降低了成本。凭借这一技术优势,公司逐渐在电子组装市场上崭露头角,赢得了众多客户的青睐。

DB Lectro Inc公司的发展小趣事

随着公司业务的不断拓展和市场竞争的加剧,DB Lectro Inc意识到知识产权保护的重要性。公司加强了知识产权的申请和保护工作,成功申请了一系列技术专利。同时,公司还积极参与知识产权维权行动,维护了自身的合法权益和公平竞争的市场环境。

Altitude Technology公司的发展小趣事

在电子行业中,合作与共赢是企业发展的重要途径。Altitude Technology深知这一点,因此积极寻求与其他企业的合作机会。通过与一家知名芯片制造商建立战略合作关系,Altitude Technology获得了更先进的芯片供应和技术支持,进一步提升了产品的竞争力。同时,公司还与其他企业开展了一系列合作项目,共同推动电子行业的发展。

DEVCON公司的发展小趣事

随着DEVCON品牌知名度的提升和产品线的不断丰富,公司开始将目光投向更广阔的市场。通过与国际知名企业的合作和代理,DEVCON的产品逐渐进入全球电子制造和维修领域。同时,公司还积极开拓新兴市场,如汽车电子、安防监控等领域,进一步扩大了市场份额。这种市场扩张的策略不仅带来了丰厚的回报,也为DEVCON公司的长期发展奠定了坚实基础。

All Sensors公司的发展小趣事

All Sensors在传感器技术领域一直保持着世界领先的地位。公司掌握着核心的MEMS传感器技术,如独有的CoBeam2 TM传感器技术等。这些技术的应用使得All Sensors的传感器在精度、稳定性和寿命等方面都达到了行业领先水平。同时,公司还不断投入研发,推出更多创新产品,满足不断变化的市场需求。

德旭电子(DEXU)公司的发展小趣事

随着公司规模的不断扩大和业务范围的不断拓展,德旭电子开始注重履行社会责任和推动可持续发展。公司积极参与公益事业和社会活动回馈社会。

在环保方面德旭电子坚持绿色生产和低碳发展理念积极推广环保技术和设备降低生产过程中的能耗和排放。同时公司还注重产品的环保性能研发和生产符合环保标准的产品满足客户的环保需求。

在社会责任方面德旭电子关注员工福利和职业发展为员工提供良好的工作环境和培训机会促进员工的成长和发展。此外公司还积极参与社会公益事业和慈善活动为社会做出积极贡献。

通过这些举措德旭电子在履行社会责任和推动可持续发展方面取得了显著成效赢得了社会的广泛认可和赞誉。

问答坊 | AI 解惑

ABS+EBD

ABS是Anti-LockBrakeSystem的英文缩写,即“刹车防抱死系统”。在没有ABS时,如果紧急刹车会使轮胎抱死,刹车的距离变长,容易跑偏或甩尾。ABS是通过控制刹车油压的收放,来达到对车轮抱死的控制,使车辆始终处于临界抱死的间隙滚动状态。    ...…

查看全部问答>

PowerPCB (PADS9.0)使用技巧

PADS 9.0版产品的出现标志着下一代PADS流程技术的诞生。与以往的旧产品相比, PADS 9.0修复和改善了之前版本软件的不足和缺点,集成了许多全新的功能,拥有了更高的可扩展性和集成度,从而使设计者能够结合Mentor Graphics众多独特的创新技术,实现 ...…

查看全部问答>

DIY FPGA初级学习板,核心板已画好,欢迎大家继续提意见!

【背景贴】: “taikai001”俺想学习FPGA--有偿寻求合作开发FPGA学习板https://bbs.eeworld.com.cn/thread-93001-1-1.html 经过和taikai001的几次讨论,准备还是搞个简单点,适合入门的。 目前基本的功能我已经画好了,随后会把原理图发上来 ...…

查看全部问答>

请教下附图中的这个芯片的具体资料

哪位大虾知道这个芯片是做什么的,还有其具体的资料可以给我分享下,不尽感谢!…

查看全部问答>

请问哪款传感器可以检测水果乙烯浓度

请问哪款传感器可以用来搭配单片机,实现检测水果散发的乙烯浓度的功能,哪位做过的请推荐一款,价格最好在500元左右的,谢谢…

查看全部问答>

基于WINCE 5.0操作平台,在VC2005 开发MFC智能设备应用软件

在VS2005开发平台下,开发的软件直接通过Microsoft ActiveSync 同步软件下载到2440开发扳上可以运行(通过开发环境) ;单独生成Release版本的,脱离开发环境下载到开发板上就不能运行了.    而使用eVC开发的应用程序就不存在这个问题. &nbs ...…

查看全部问答>

问一个107+DP83848初始化的问题

请问一下调试过的朋友, STM32F107+DP83848做网络通讯, 在初始化的时候,是不是必须插网线?…

查看全部问答>

学习Sitara AM335x 的Uboot移植笔记

一、移植过程1、架构移植2、SOC移植3、板级移植二、3种移植的区别       1、架构移植:Cortex-A8、MIPS、POWERPC       2、SOC移植 :同一系列,不同型号间的外设(如I2C)的区别     &nbs ...…

查看全部问答>

Beaglebone Black 利用Ubuntu上网二

昨天成功地完成了BBB的上网问题,但是今天发现似乎有更方便的解决方案。 之前配置两张网卡是直接在/etc/network/interfaces中写入配置信息的。这样做当然可以成功,但是有一个问题,就是系统托盘上的NetworkManager就不会再出现和这两张网卡相关的 ...…

查看全部问答>