欢迎来到【material-ui源码】【ffff源码】【vmd源码】stm32f103 源码-皮皮网网站!!!

皮皮网

【material-ui源码】【ffff源码】【vmd源码】stm32f103 源码-皮皮网 扫描左侧二维码访问本站手机端

【material-ui源码】【ffff源码】【vmd源码】stm32f103 源码

2024-11-30 01:17:36 来源:{typename type="name"/} 分类:{typename type="name"/}

1.STM32F103正点原子学习笔记系列——串口
2.STM32F103正点原子学习笔记系列——高级定时器
3.如何使用MDK5.0建立STM32F103工程
4.Android OTG USB串口通信
5.FreeRTOSv202212.01移植到STM32
6.Dynamixel伺服舵机控制

stm32f103 源码

STM32F103正点原子学习笔记系列——串口

       数据通信的源码基础概念涉及到串行和并行通信、单工、源码半双工、源码全双工通信以及同步、源码异步通信。源码串行通信仅需一根线传输数据,源码material-ui源码而并行通信则需要多根线。源码通信方向的源码分类包括单工(数据单向传输)、半双工(双向传输需分时进行)和全双工(同时双向传输)。源码同步通信共享同一时钟信号,源码而异步通信则通过在数据中加入起始位和停止位来同步。源码

       串口(RS)是源码按位发送和接收的接口,常见的源码有RS、RS和RS等。源码RS接口的源码典型配置包括数据输出(TXD)和数据输入(RXD),以及地线(GND)。在Stm中,主要关注的接口是TXD、RXD和GND。RS与CMOS/TTL电平之间存在差异:RS的逻辑1为-~-3V,逻辑0为+3~+V,而CMOS电平的逻辑1为3.3V,逻辑0为0V。TTL电平的逻辑1为5V,逻辑0为0V。由于电平的不兼容,CMOS/TTL不能直接与RS进行信息交换。

       RS通信协议包括:启动位(必须占1位,电平为逻辑0),ffff源码有效数据位(可选5-9位,LSB在前,MSB在后),校验位(可选1位,可不设置),以及停止位(必须有,可选0.5-2位,电平为逻辑1)。RS异步通信协议的这些要素是通信过程中的关键组成部分。

       STM的USART(通用同步异步收发器)可以与外部设备进行全双工异步通信,其主要特征包括数据寄存器(DR)、波特率部分、波特率寄存器(BRR)等。在进行读写操作时,只能操作数据寄存器。USART的波特率部分依赖于挂载在哪个时钟总线上,如APB1或APB2。在设置波特率时,需要计算USARTDIV的值,该值取决于挂载的时钟频率和使用的波特率。

       HAL库为STM提供了外设初始化和中断回调机制,MspInit()是一个留给用户定义的接口,用于完成GPIO、NVIC、CLOCK等的初始化。串口USART的初始化涉及到GPIO的配置、时钟通道的选择、中断优先级的vmd源码设置等。通过HAL库的函数,可以以中断或阻塞的方式实现USART/UART的异步通信。

       IO引脚的复用功能使得GPIO端口既能够用于输入/输出,也能被其他非GPIO外设控制。在F1系列的STM中,有多种引脚复用配置选项,允许用户根据需求灵活配置。

       编程实战和源码解读部分则涉及到实际的项目开发和代码理解,包括如何在特定项目中应用上述通信原理和库函数,以及如何通过阅读和分析源码来深入理解底层实现和优化代码。

STMF正点原子学习笔记系列——高级定时器

       高级定时器简介:TIM1/TIM8包含位递增、递减、中心对齐计数器(0至),具备位预分频器(分频系数1至)。它们用于触发DAC与ADC,并在更新事件、触发时间、输入捕获、输出比较时产生中断/DMA请求。高级定时器提供4个独立通道,用于输入捕获、输出比较、输出PWM及单脉冲功能。高级定时器能够根据外部信号控制,支持编码器和霍尔传感器电路。此外,它们具备重复计数器功能、可编程的moc源码互补输出、断路输入以实现用户自定义的安全配置。

       高级定时器框图展示其内部结构,包括计数器、预分频器、中断控制单元、通道配置、输出控制等关键组件。

       高级定时器输出指定个数PWM实验通过设置重复计数器RCR实现。除最后一个PWM输出外,其余PWM输出仅需配置RCR值,更新事件会在RCR+1次溢出时触发。

       高级定时器输出指定个数PWM实验原理:确保在进行PWM输出时,将MOE(输出使能)设置为1,并在TIMx_BDTR寄存器中配置互补输出功能。在初始化函数中调用相关HAL库函数配置定时器实例、预分频器、重复计数器值等关键参数。然后配置GPIO和定时器中断,开启PWM输出。通过中断函数,根据需要触发更新事件,并控制PWM计数器。

       课堂源码与例程的区别在于,课堂源码通过调用HAL库中断处理函数并进入回调函数,而例程直接在中断函数内进行用户代码编写,跳过了HAL库的中断处理流程。

       高级定时器输出比较模式实验涉及PWM周期由ARR决定,占空比固定为%,ex源码相位由CCRx控制。配置相关HAL库关键结构体实现输出比较模式,包括初始化定时器实例、配置比较模式、输出极性、比较值等,通过设置定时器的比较寄存器值来控制PWM占空比。

       高级定时器互补输出带死区控制实验包括H桥应用,通过增加死区时间控制避免元器件延迟导致的输出冲突。设置MOE为1开启输出,配置死区时间、刹车功能和输出空闲状态,实现互补输出和死区控制。

       高级定时器PWM输入模式实验涉及通道1和通道2的使用,通过TIM3CH2输出PWM,将PWM输入到TIM8CH1进行测量。配置采样频率、PSC和ARR以确保准确的测量结果,并通过HAL库函数实现输入捕获功能。中断服务函数负责读取计数器值和捕获事件。

如何使用MDK5.0建立STMF工程

       1.解压stmfx_stdperiph_lib.zip 可以从ST官方网站免费下载。

       2.创建一个Demo文件夹

        2.1 新建子文件夹User,用于存放用户源程序

        2.2 新建子文件夹Project,用户KEIL工程文件

        2.3 在Project下依次创建Obj和List子文件夹,存放编译过程中产生的中间文件。

       3. 复制源代码到Demo文件夹

        3.1 将stmfx_stdperiph_lib\STMFx_StdPeriph_Lib_V3.1.2Libraries文件整体复制到Demo文件夹下。这就是ST的标准库,是以源代码形式提供的。

        3.2 将库中的演示代码IOToggle中的文件复制到Demo\User文件夹.

       4. 新建一个Keil MDK工程

        4.1 启动Keil MDK,点击菜单 New uVision Project,然后按向导进行操作

        4.2 选择CPU类型为 STMFZE (这是安富莱STM开发板采用CPU类型)

        4.3 当提示是否复制启动代码时,请选择否。(我们用最新的库中的启动代码,不用Keil软件自带的旧版本启动文件)

        4.4 根据自己的需要修改Target名字。(名字任意)

        4.5 为了便于代码管理,在这个Project下创建几个Group (名字可以任意)

        User : 存放用户自己写的源代码

        RVMDK : 存放启动文件(汇编文件)

        StdPeriph_Driver : 存放ST标准库文件

        CMSIS : 存放CMSIS接口文件(这也是库的一部分)

        4.6 创建好Group后,我们开始依次添加文件。

       5. 修改源代码。我们将修改main.c 文件,换成我们自己跑马灯程序。

       6. 配置工程, 点击“Options”按钮

        6.1 切换到Output。

        选择Object文件夹。

        在Create Hex File 前打钩。

        6.2 切换带Listing。

        选择Listings文件夹

        6.3 切换到C/C++

        添加两个预编译宏 STMFX_HD, USE_STDPERIPH_DRIVER (这是ST库用到了这两个宏)

        修改Includes路径

        6.4 切换到Debug

        选择硬件调试器(缺省是软件仿真),我们选择Cortex-M3 J-Link调试器

        再 Run to main前打钩

        6.4 切换到Utilities

        选额调试器类型,我们选择Cortex-M3 J-Link

        点settings按钮,添加Flash编程算法,我们选择STM高密度器件,Flash容量K字节

       7. 配置工程完毕。下面开始编译。

       8. 编译OK,开始调试。

       9. 教程结束。

Android OTG USB串口通信

       实现Android手机与单片机(使用STMF)通过OTG接口进行USB串口通信,需准备三星S9手机、OTG转换器、Nucleo-stmF开发板、USB数据线、CPUSB to TTL适配器。平台采用Android studio与STMCubeMX。

       在STM端,利用System Workbench for STM和STMCubeMX进行开发,其中关键步骤包括:将CP的5V电源连接至STM的5V电源(无需额外供电),地线连接至地线,TX连接至STM的USART1_RX引脚(PA),RX连接至USART1_TX引脚(PA9)。

       STM端主要使用STM的HAL库编写代码,具体实现细节非全代码提供。

       在Android端,可参考以下资源实现OTG功能调试与USB串口通信:Android手机OTG功能调试USB串口的demo源码程序,在Android studio中运行调试。此过程涉及设置手机OTG模式、配置USB设备参数、读写数据流等。

       通过以上步骤,成功实现了Android手机与STM单片机之间的USB串口通信,确保了数据的双向传输,为后续数据处理提供了基础。

FreeRTOSv.移植到STM

       介绍

       将FreeRTOSv.移植到STMFC8T6单片机的过程概述。此版本为当前最新,适用于开发者进行系统级编程。

       硬件平台

       选用STMFC8T6作为移植目标,此型号单片机提供丰富的外设资源,适合各种嵌入式应用。

       软件架构与操作步骤

       1. 从freertos.org/zh-cn-cmn下载源代码。注意,V9.0以后版本由Amazon收购后开发,V9.0被认为较为稳定。本文档介绍的移植方法适用于最新版本,与旧版本相比,源代码变化不大,可进行对比学习。

       2. 解压源码并复制FreeRTOS目录内容至项目目录下。删除除Source文件夹外的所有文件,Source文件夹是核心模块,包含实际移植所需的文件。

       3. 进入Source文件夹,删除非源代码文件,保留include和portable目录,前者包括头文件,后者为接口文件。

       4. 进入Source下的portable文件夹,删除非必要的文件和文件夹(如RVDS和MemMang),仅保留与M3内核相关的ARM_CM3接口文件以及heap_4.c,其余可保留但暂不使用。

       5. 从FreeRTOSv.\FreeRTOS\Demo\CORTEX_STMF_Keil复制FreeRTOSConfig.h至include文件夹。此配置文件用于系统裁剪。

       6. 将保留的文件添加到工程中,并配置文件路径。确保编译无错误。

       创建任务的详细步骤

       在main.c文件中,创建任务。关注stmfx_it.h文件,增加xPortSysTickHandler外部声明,并注释掉SVC_Handler和PendSV_Handler。SysTick_Handler作为定时器回调函数,用于调度处理。

       在FreeRTOSConfig.h中添加中断宏定义,由port.c中的汇编语言实现,用于任务启动和切换。设置INCLUDE_xTaskGetSchedulerState为1。

       在main.h中加入RTOS头文件,包含操作系统所需的所有调用文件。

       至此,重新编译即可运行程序。最后,确保工程总目录包含标准库stdlib(3.5.0版本),以支持完整的硬件抽象层。

Dynamixel伺服舵机控制

       舵机,作为一种电机执行器,具备角度持续变化与保持输出的特性。我最早接触舵机是在制作固定翼模型飞机时,利用KT泡沫板裁剪、热熔胶固定机身,安装无刷电机在机头,以及两翼和尾翼上的舵机,分别控制副翼和航向。当时由于是学生,预算有限,常用的是9克SG塑料舵机和银燕ESMAII,它们轻便、成本低且适合小型负载。这类舵机通过单片机输出PWM信号控制,但资源消耗高,不适合精细控制的机器人。

       AX-A伺服舵机是更高级的选择,它具备精准的位置和速度控制、柔性驱动、状态反馈、系统报警、总线通讯与分布式控制等特点。本文将以Dynamixel AX-A伺服舵机为例,使用STMF控制器,详细讲解其控制原理、方法与代码,适用于Dynamixel其他系列舵机。

       AX-A的通讯协议需要通过总线将多个不同ID的舵机连接,控制器发送指令包至舵机,舵机反馈状态包回传。指令包格式包括帧头、ID、长度、执行指令码、附加信息与校验码。配置USART3作为串口,设置波特率为,广播ID(0xFE)用于设置舵机波特率。指令包由帧头、ID、长度、指令码(0x)、写入地址(0x)与目标值(0x)组成,通过计算校验码确保通信准确性。设置函数BaudRateSetup()实现波特率同步。

       为了知道每个舵机的ID,可以采用广播ID(0xFE)进行ID设置,通过读写EEPROM区地址3的ID条目来定制ID值。设置函数SetID()使用类似方法实现,包含ID地址、写入值与校验码。指示灯设置函数SetLED()通过RAM区地址的值控制指示灯状态。

       完成舵机配置后,通过硬件电路连接,包括USART3的PB与舵机data线、3S航模电池供电。主函数调用配置函数后,指示灯由熄灭变为红色常亮,表明波特率和ID设置成功。

       AX-A舵机有两种工作模式:轮子模式与关节模式。轮子模式实现°无限旋转,关节模式则在设定角度内运动。通过代码实现这两种模式的切换,展示舵机的灵活性与控制能力。

       完整示例代码包含头文件和源代码,具体实现步骤请参考数据手册与以上介绍,编写功能丰富的控制函数。