STM32驱动开发

这篇具有很好参考价值的文章主要介绍了STM32驱动开发。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

概述

本文简单介绍STM32标准库下的部分驱动开发流程(F1系列芯片),扩展介绍部分重要的属性。

GPIO

复用功能
将某些功能复用到其他引脚上使用。
属性
引脚(GPIO_Pin):芯片对应的引脚。

速率(GPIO_Speed):输出驱动电路的响应速度,做输入时此功能无效。芯片内部在I/O口的输出部分安排了多个响应速度不同的输出驱动电路,用户可以根据自己的需要选择合适的驱动电路,通过选择速度来选择不同的输出驱动模块,达到最佳的噪声控制和降低功耗的目的。

模式(GPIO_Mode):共8种。
  浮空输入(GPIO_Mode_IN_FLOATING) :信号直接输入到引脚,直接判断电平状态。适用于按键输入。
  上拉输入(GPIO_Mode_IPU):在引脚接入上拉电路,故引脚默认高电平。适用于下拉中断。
  下拉输入(GPIO_Mode_IPD):在引脚接入下拉电路,故引脚默认低电平。适用于上拉中断。
  模拟输入(GPIO_Mode_AIN):引脚接入到某个外设上。适用于ADC功能。
  开漏输出(GPIO_Mode_Out_OD):可以输出低电平,无法输出高电平,输出高电平时需要借助上拉电路。故可以通过上拉电路,提高输出的电平电压,适用于I2C等端口。
  推挽输出(GPIO_Mode_Out_PP):输出的信号具有驱动能力。适用于LED等外设。
  复用开漏输出(GPIO_Mode_AF_OD):同开漏输出,只是引脚具有复用功能。
  复用推挽输出(GPIO_Mode_AF_PP):同推挽输出 ,只是引脚具有复用功能。
配置过程
1、使能GPIO时钟。
2、设置属性。
备注
  引脚的属性该怎么设置,由硬件电路决定,软件需要适配硬件。比如某个引脚做输入功能,外部无任何上拉、下拉电路,则此引脚需配置成浮空输入。

ADC

  STM32 将 ADC 的转换分为 2 个通道组:规则通道组和注入通道组。规则通道相当于正常运行的程序,注入通道组相当于中断。注入通道的转换可以打断规则通道的转换, 在注入通道被转换完成之后,规则通道才可以继续转换。
属性
ADC_Mode(操作模式):

  双ADC模式下有效。
  快速交替和慢速交替的区别在于前一个ADC转换完成后,后一个ADC需等待一段时间才启动,慢速交替模式下等待的时间更长。使用二者时,必须确保无注入通道组产生。

  ADC_Mode_InjecSimult(同步注入模式):转换一个注入通道组,同时给另一个ADC提供同步触发,既两个ADC同时触发。两个ADC在同一个通道的采样时间不能重叠。
stm32驱动,# STM32,stm32

  ADC_Mode_RegSimult(同步规则模式):转换一个规则通道组,同时给另一个ADC提供同步触发,既两个ADC同时触发。两个ADC在同一个通道的采样时间不能重叠。
stm32驱动,# STM32,stm32

  ADC_Mode_FastInterl(快速交替模式):只适用于规则通道组(只能为一个通道)。
stm32驱动,# STM32,stm32

  ADC_Mode_SlowInterl(慢速交替模式):只适用于规则通道组(只能为一个通道)。
stm32驱动,# STM32,stm32

  ADC_Mode_AlterTrig(交替触发方式):只适用于注入通道组,当第一个触发产生时,第一个ADC通道组被转换;当第二个触发产生时,第二个ADC通道组被转换;以此交替重复。
stm32驱动,# STM32,stm32

  ADC_Mode_Independent(独立模式):此模式下,双ADC不同步工作,每个ADC接口独立工作 。
  ADC_Mode_RegInjecSimult(规则注入同步模式):规则组同步转换可以被中断,以启动注入组的同步转换。
  ADC_Mode_RegSimult_AlterTrig(规则同步+交替触发模式):规则组同步转换可以被中断,以启动注入组的同步转换。在注入组转换时触发注入,最后一次的触发注入会被忽略。
stm32驱动,# STM32,stm32

  ADC_Mode_InjecSimult_FastInterl(注入同步+快速交替模式)、  ADC_Mode_InjecSimult_SlowInterl(注入同步+慢速交替模式):一个注入事件可以中断一个交叉转换。这种情况下,交叉转换被中断,注入转换被启动,在注入序列转换结束时,交叉转换被恢复。
stm32驱动,# STM32,stm32

ADC_ScanConvMode(扫描模式):是否开启扫描,单通道无需扫描,设置为DISABLE,多通道需要扫描,设置为ENABLE。

ADC_ContinousConvMode(连续转换):一次转换完成后是否自动开始下一次。
DISABLE:不会连续转换;ENABLE:连续转换。

ADC_ExternalTrigConv(启动转换规则的外部事件):外部事件主要包含定时器通道、外部中断等。一般不通过外部事件触发转换,而是软件自动触发,设置为ADC_ExternalTrigConv_None。

ADC_DataAlign(数据对齐方式):ADC用16位寄存器保存数据,但是最大精度只有12位,故存在对齐方式,一般选择右对齐ADC_DataAlign_Right。设置左对齐可以在精度要求较低时提高程序的处理速度(网上资料),一般不采用。

ADC_NbrOfChanner(通道数量):有多少个通道就设置多少。一个ADC最多有16个通道。
配置过程
1、使能ADC时钟、对应的GPIO时钟
2、配置引脚为“模拟输入”模式。
3、设置属性。
4、设置ADC通道为规则通道组或注入通道组。
5、重置ADC校准。
6、重新校准ADC。

DMA(Direct Memory Access)

在RAM和I/O之间直接传输数据,无需CPU干预。
属性
DMA_PeripheralBaseAddr():

DMA_MemoryBaseAddr():

DMA_DIR():

DMA_BufferSize():

DMA_PeripheraInc():

DMA_MemoryDataSize():

DMA_PeripheralDataSize():

DMA_MemoryDataSize():

DMA_Mode():

DMA_Priority():

DMA_M2M():文章来源地址https://www.toymoban.com/news/detail-605546.html

到了这里,关于STM32驱动开发的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • STM32MP157驱动开发——按键驱动(异步通知)

    Linux 系统中也有很多信号,在 Linux 内核源文件 includeuapiasm-genericsignal.h 中,有很多信号的宏定义: 就 APP 而言,你想处理 SIGIO 信息,那么需要提供信号处理函数,并且要跟 SIGIO 挂钩。这可以通过一个 signal 函数 来“给某个信号注册处理函数”,用法如下: 重点从②开始:

    2024年02月15日
    浏览(53)
  • STM32MP157驱动开发——LED驱动(原始架构)

    LED 的驱动方式,常见的有四种。 ① 使用引脚输出 3.3V 点亮 LED,输出 0V 熄灭 LED。 ② 使用引脚拉低到 0V 点亮 LED,输出 3.3V 熄灭 LED。 ③ 使用引脚输出 1.2V 点亮 LED,输出 0V 熄灭 LED。 ④ 使用引脚输出 0V 点亮 LED,输出 1.2V 熄灭 LED。 有的芯片为了省电等原因,其引脚驱动能力

    2024年02月03日
    浏览(39)
  • STM32MP157驱动开发——按键驱动(休眠与唤醒)

    当应用程序必须等待某个事件发生,比如必须等待按键被按下时,可以使用“休眠-唤醒”机制: ① APP 调用 read 等函数试图读取数据,比如读取按键; ② APP 进入内核态,也就是调用驱动中的对应函数,发现有数据则复制到用户空间并马上返回; ③ 如果 APP 在内核态,也就

    2024年02月16日
    浏览(42)
  • STM32MP157驱动开发——按键驱动(POLL 机制)

    使用休眠-唤醒的方式等待某个事件发生时,有一个缺点:等待的时间可能很久。我们可以加上一个超时时间,这时就可以使用 poll 机制。 ① APP 不知道驱动程序中是否有数据,可以先调用 poll 函数查询一下,poll 函数可以传入超时时间; ② APP 进入内核态, 调用到驱动程序的

    2024年02月15日
    浏览(38)
  • STM32MP157驱动开发——USB设备驱动

    参考文章:【正点原子】I.MX6U嵌入式Linux驱动开发——Linux USB驱动   由于 USB 协议太过庞大和复杂,所以本节只对 STM32MP157 自带的 USB 驱动进行使能和测试。详细的 USB 接口和协议的介绍,可以参考原子哥的资料《USB2.0 协议中文版.pdf》和《USB3.0 协议中文版.pdf》。   USB 全

    2023年04月14日
    浏览(54)
  • STM32MP157驱动开发——按键驱动(线程化处理)

    工作队列是在内核的线程的上下文中执行的 工作队列中有多个 work,前一个 work 没处理完会影响后面的 work。解决方法有如下2种: 比如自己创建一个内核线程,不跟别的 work 在一块。例如存储设备比如 SD/TF采用的就是单独一个线程。 使用线程化的中断处理。中断的处理仍然

    2024年02月16日
    浏览(43)
  • STM32MP157驱动开发——按键驱动(定时器)

    定时器涉及函数参考内核源码:includelinuxtimer.h 给定时器的各个参数赋值: 设置定时器 :主要是初始化 timer_list 结构体,设置其中的函数、参数。 a) 向内核添加定时器。timer-expires 表示超时时间。 b) 当超时时间到达,内核就会调用这个函数:timer-function(timer-data)。 修改定时

    2024年02月15日
    浏览(53)
  • (STM32笔记5)ws2812驱动开发

    ws2812 需要开发的外设:ws2812 开发环境:MDK 开发板:stm32最小系统板 杜邦线无数 一、原理阐述 (一) 这个ws2812有很多种,一个小灯、灯带,矩形像素屏等等。 这些都是DIN连接输入,DOUT连接输出,另外两个引脚是GNE和VCC   (二) 数据传输原理: 第1个WS2812B灯珠接收到了第1个

    2024年01月19日
    浏览(45)
  • STM32标准库开发——PWM驱动代码

    使能定时器二时钟 设置定时器时钟源 配置定时器二的时基单元 初始化定时器二的一二三通道引脚,使用复用推挽输出模式 配置定时器输出比较寄存器 使能定时器二

    2024年01月23日
    浏览(142)
  • STM32MP157驱动开发——Linux LCD驱动(上)

      LCD 是很常用的一个外设,通过 LCD 可以显示图片、界面UI等,提高人机交互的效率。STM32MP1 提供了一个 LTDC 接口用于连接 RGB 接口的液晶屏。本节就来学习如何使用这个接口。   LCD 全称是 Liquid Crystal Display,也就是液晶显示器,是现在最常用到的显示器。网上对于 LCD

    2024年02月08日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包