STM32H750VBT6工程KEIL模板

一、模版功能说明

        该模板的目的是在STM32H750VBT6核心板上搭建起基本的单片机环境,包括时钟配置、串口配置、时钟输出以及LED亮灭等功能,单片机有了基本的工作和开发条件则便于后续相关工程的编写。
        该工程使用LL库进行编程,为什么使用LL库呢?首先ST官方已经停止维护标准库,之前我在使用STM32F103时是使用的标准库来开发,但是STM32H750并没有官方的标准库进行使用,只有HAL库和LL库。但是HAL库过于抽象,效率较低,而LL库较为接近底层,和标准库相近,因此选用LL库进行开发。

二、模板编程过程

        1,最初:
        (1) ST官网下载了LL库进行开发。
        (2) STM32H7B3xQ HAL User Manual上查看LL库相关的SDK手册,便于了解LL库所用的外设,结构体,函数等功能。虽然名字和STM32H750不符合,但是STM32H7B3xQ HAL User Manual中的LL库相关的介绍是与STM32H750兼容的。
        (3) STM32H750开发手册上查看寄存器定义和功能,以及外设介绍等相关内容。
        (4) 正点原子STM32H750的资料中查找相关例程作为参考。

三、工程KEIL配置

在这里插入图片描述
                                                图3-1 KEIL配置Target
        IROM的地址和大小要与STM32H750相匹配,这个地址就是单片机程序的起始地址。因为我在编译正点原子例程时使用ARMv6编译器有报错的情况,所以我在这里使用ARMv5编译器。但是要注意最新版本keil没有ARMv5编译器,需要手动下载安装。

在这里插入图片描述
                                                        图3-2 KEIL配置Output
        选中了Browse Information,选中这个方便查看函数定义。

在这里插入图片描述
                                                        图3-3 KEIL配置C/C++
        最重要的是Define部分,宏定义了STM32H750xx,指定包含头文件stm32h750xx.h。同样宏定义了USE_FULL_LL_DRIVER,才能完整的使用LL库。

在这里插入图片描述

                        图3-4 KEIL配置Debug->右侧Settings->Flash Download
        勾选了Reset and Run,才能在烧录完成后自动运行该程序。

四、STM32工程启动流程

        单片机上电后自动运行startup_stm32h750xx.s中的汇编代码,从第1行到第230行,都是定义操作,比如定义了栈,堆,中断向量。
        然后开始运行SystemInit函数,SystemInit函数在system_stm32h7xx.c中定义,是LL库本身就提供的,不需要修改,主要是定义了FLASH,启动了内部时钟等相关操作,让单片机有了运行程序的最基本的条件。
        运行了SystemInit之后,然后进入main函数,也就是我们所编写的代码。

五、工程代码讲解

1,时钟配置,system_init函数
        系统初始化函数,用于配置系统的状态。主要是开启了I-Cache,D-Cache,然后配置单片机供电,配置时钟选择HSE,也就是外部高速晶振,然后HSE进入PLL1,PLL1对输入时钟进行5分频,160倍频,然后P路2分频。P路输出的时钟就作为主频,也就是说25MHz外部晶振经过PLL1变成了400MHz。400MHz就是主频。
        因为外设都是挂在AHB,APB上的,所有的AHB时钟频率都一样,APB时钟频率可以不一样,具体要看分频系数,在本工程中配置AHB均为主频的2分频也就是200MHz,配置所有的APB时钟为AHB的2分频也就是100MHz。配置完成后需要声明一下主频为400MHz,并且开启sysclk时钟,用于延时。
        Sysclk也是一个外设,也是挂在时钟总线上的,如何找到外设所在时钟总线呢?可以在STM32H7B3xQ HAL User Manual的目录中点击Modules->STM32H7xx_LL_Driver->BUS->
Bus Exported Constans中找到。
        至此system_init函数的功能完成,主要就是配置时钟树,在STM32CubeMX中进行GUI配置更为方便直观。
2,串口配置
        串口选择串口1,流程就是开启串口时钟以及串口所在GPIO口的时钟,配置串口时钟源,配置GPIO的复用功能,使得GPIO映射到串口引脚,使能串口中断,配置串口参数,最后进行使能即可。
        3,其它外设如GPIO,MCO等
        GPIO配置主要是配置LED,观察LED的亮灭从而验证单片机状态。
        MCO的匹配主要是输出HSE时钟,如果示波器看出有时钟输出并且频率正确,那么单片机也是正常工作的并且HSE工作正常。MCO输出频率定义为HSE的十分频,也就是25Mhz/10。如果仅仅是用于观察时钟状态,那么分频数越高越好。分频数越高,MCO输出时钟的频率越低,示波器观察越清楚。不过输出的信号是方波,毕竟经过了内部电路进行调整,但是HSE输入的时钟肯定是正弦。
        其它外设的配置流程大体一致,基本上都是定义结构体,使能时钟,初始化结构体后对外设进行配置,如果有中断就配置中断优先级,编写中断函数,然后进行使能并且等待配置完成即可。

六、要点

        1,时钟配置是参照stm32h750开发手册的rcc模块进行编写的。GPIO口复用功能映射表在stm32h750vb 中可以找到。
        2,关于中断函数
        在串口配置中我使能了串口接收中断,并且中断优先级最低。串口1的中断函数名称一定是USART1_IRQHandler,因为在startup_stm32h750xx.s中定义的串口1中断函数就是USART1_IRQHandler。
        我定义了一个串口缓冲区,因为在main函数的while(1)循环中,每次执行的代码都是一样的,如果串口发送的数据是有规律的,那么每次循环中串口接收的数据所占缓冲区的位置是一样的,那么就可以统一进行读取与处理,读取后立刻清除缓冲区即可,这样可以极大的提高效率。如果发送的数据是没有规律的,那么就用USART_Read_Newest_Byte函数读取串口最新发送的数据即可。
        3,关于串口发送浮点数等多字节数据
        串口大多设置成8位1停止,这样最高发送的数据也就是255,那么如果发送的数据为10000000,或者是1.234567浮点数该怎么办呢?一种办法是用sprintf转成字符串发送,发送后再转换为数据。还有一种方法就是发多个字节,比如我定义double a = 1.23456,double 占据8个字节,假设a的地址为0x1000,八个字节就是0x1000~0x1007,假设里面的内容是0x11,0x22,0x33,0x44,0x55,0x66,0x77,0x88。利用uint8_t指针b=a的地址,那么b=0x11,(b+1)=0x22,…………*(b+7)=0x88,然后连续发送8个字节,在接收端同样定义一个double 数据,利用uint8指针指向double数据的地址,分别接收8个字节依次对double数据的地址赋值,这样即完成了浮点数据的传输。这种传输方式同样可以完成2字节(short int),4字节(int,float)等数据的传输,原理是一样的,具体函数在usart.c有展示。
        为什么要定义uint8_t指针呢,因为uint8_t数据类型仅占据一个字节,这样定义的地址b=0x1000,b+1=0x1001。如果定义成double指针b,那么该指针所指数据则占据八个字节,那么b=0x1000,b+1就等于0x1008了。不过我建议如果不是大批量的数据,还是利用字符串传递较为方便。
        4,关于串口发送字符串
        正点原子是直接重映射printf函数,我则是自己定义了字符串发送函数,因为字符串默认最后一位停止位为’\0‘,所以检测到’\0’进行发送。
        5 关于system_init.h中的宏定义
        为了保证程序的通用性,我将所用到的外设和引脚都在其中利用宏定义进行声明,如果需要改变引脚,仅需要再宏定义中进行修改即可,不需要动程序,这样的移植性比较强。

七、工程下载

链接:https://pan.baidu.com/s/1XNJA1oIAOu2lXOKjdd9Fkg?pwd=1234
提取码:1234

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: STM32H750VBT6是STMicroelectronics(ST)公司推出的一款高性能微控制器(MCU)。该数据手册为开发人员提供了该芯片的详细技术规格和功能描述。 首先,STM32H750VBT6是基于Arm Cortex-M7内核的MCU,具有高达480 MHz的主频,使其能够处理复杂的任务和多媒体处理。此外,它还配备了大容量的Flash存储器和SRAM,以满足高性能应用的存储需求。 在外设方面,STM32H750VBT6提供了丰富的功能模块。它具有多个通用定时器、高级定时器和基本定时器,可用于各种定时和计时应用。此外,它还支持多种通信接口,例如SPI、I2C、USART和USB等,可满足各种外设连接需求。 该芯片还具有多个ADC和DAC通道,以及各种基于PWM的控制器,使其在工业自动化和电机控制等领域中具有广泛的应用。此外,它还集成了千兆以太网控制器和LCD控制器,适用于网络通信和显示控制等应用。 为了提高系统的安全性,STM32H750VBT6还提供了硬件加密和校验的支持,以保护存储器中的数据和代码。此外,它还具有DMA控制器和智能电源管理单元,可实现高效的数据传输和电源管理。 总之,STM32H750VBT6是一款功能强大的高性能微控制器,具有丰富的外设和强大的处理能力。该数据手册为开发人员提供了详细的规格和功能描述,有助于开发人员了解和应用该芯片,满足不同应用领域的需求。 ### 回答2: STM32H750VBT6是一款高性能的ARM Cortex-M7内核微控制器。该芯片具有丰富的功能和强大的性能,适用于广泛的应用领域,如工业控制、医疗设备、智能家居等。 首先,在数据手册中,我们可以找到有关STM32H750VBT6芯片的详细规格和特性。包括芯片的封装、工作频率、存储器大小、电源电压要求等。这些信息非常重要,可以帮助我们了解该芯片的硬件特性,从而在设计和开发过程中做出相应的决策。 其次,数据手册中还包含了芯片的引脚定义和功能说明。这些信息对于将芯片与其他外部电路和设备进行连接非常重要。我们可以了解到每个引脚的电气特性、功能以及对应的外设模块。这有助于我们在设计电路板时正确连接引脚,并与其他外设进行通信。 此外,数据手册还提供了关于STM32H750VBT6芯片内部外设模块的详细说明。这些外设模块包括通用定时器、通用串行接口、ADC/DAC转换器等。数据手册中提供了这些外设的配置和使用方法,以及相关寄存器的详细介绍。我们可以通过阅读数据手册来了解如何配置和使用这些外设模块,以满足我们的应用需求。 最后,数据手册还提供了有关STM32H750VBT6芯片的电气特性、工作条件和可靠性等信息。这些信息是确保芯片在设计和操作过程中稳定工作的重要参考。我们可以找到有关电源电压、温度范围、EMI特性等的详细说明,以确保电路设计和系统集成的可靠性和稳定性。 综上所述,STM32H750VBT6数据手册为工程师提供了关于这款芯片的详细信息,包括规格、引脚功能、外设模块配置和使用方法,以及电气特性和可靠性等。通过阅读和理解数据手册,工程师可以更好地熟悉和理解芯片的性能和特性,从而在设计和开发过程中做出准确和高效的决策。 ### 回答3: STM32H750VBT6是一款由STMicroelectronics开发的高性能微控制器,属于STM32H7系列。该微控制器具有丰富的外设集成和卓越的性能,适用于广泛的应用领域。 STM32H750VBT6数据手册提供了有关该微控制器的详尽信息。手册包含了该微控制器的功能特性、引脚定义、电气特性、时钟和电源管理、内存架构、中断和异常处理、外设和接口等内容。 该手册首先介绍了STM32H750VBT6的架构特性。该微控制器采用了ARM Cortex-M7核心,时钟频率可高达480MHz。它还配备了丰富的存储器,包括128KB的SRAM和1MB的闪存,同时还支持外部存储器接口。 数据手册还详细介绍了该微控制器的外设和接口。其中包括多个串行接口(如SPI、I2C、USART和USB),模数转换器(ADC和DAC)、定时器、通用输入/输出口、以太网接口等。这些外设可以满足不同应用领域的需求。 此外,手册还提供了关于时钟和电源管理的信息。它详细解释了如何配置和使用时钟树,以及如何管理不同模式下的功耗。 对于开发人员来说,该手册还包含了有关编程的详细信息。它提供了寄存器和位域的描述,以及代码示例和源代码库。借助这些信息,开发人员可以充分发挥STM32H750VBT6微控制器的功能。 总之,STM32H750VBT6数据手册是了解和使用这款微控制器的重要参考资料。通过阅读手册,开发人员可以深入了解其功能、性能和外设集成,从而更好地应用于各种项目中。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值