STM32CubeMX在F103上的ADC注入通道配置异常问题

2023-05-16

前言

最近业余时间在搞无刷电机FOC的控制,其中有一部分是关于流过电机三相绕组电流采集的,需要用到STM32内置的ADC,核心是需要使用注入通道以确保ADC数据采集的实时性,但是我在STM32配置完ADC的几个通道后,将几个采集通道逐个接地,发现仅有最后一个通道读取ADC值有效,故写下写这篇博客,以防后面的同志遇到和我一样的问题不知道怎么处理。

STM32CubeMX配置

配置外部时钟源和调试方式我就不具体说明了,直切正题:
adc1配置,我配置了2~6通道,其中2、3为规则通道,4、5、6为注入通道,并将注入通道的触发源设定为定时器1的事件触发;且配置ADC的中断,这里就不放图了。注入通道转换完的数据是存放到adc句柄的Instance下的JDR1到JDR4中,可将这些数据直接取出即可。
在这里插入图片描述
设置定时器1,使能事件触发
在这里插入图片描述
设置完成后直接生成项目
在main.c文件的USER CODE BEGIN PV后添加如下代码

/* USER CODE BEGIN PV */
uint16_t ADC_result[2];
uint16_t InJAdc_result[3];
/* USER CODE END PV */

main函数内的USER CODE BEGIN 2加入如下代码

/* USER CODE BEGIN 2 */
	__HAL_ADC_ENABLE_IT(&hadc1, ADC_IT_JEOC);
	__HAL_TIM_ENABLE(&htim1);
	HAL_ADC_Start_DMA(&hadc1, (uint32_t *)ADC_result, 2);
	HAL_ADCEx_InjectedStart(&hadc1);
  /* USER CODE END 2 */

在main.c文件的USER CODE BEGIN 4 添加如下代码,确保转换完后立即可将读取的AD值刷新到我定义的数据区

void HAL_ADCEx_InjectedConvCpltCallback(ADC_HandleTypeDef * hadc)
{
	InJAdc_result[0] = hadc->Instance->JDR1;
	InJAdc_result[1] = hadc->Instance->JDR2;
	InJAdc_result[2] = hadc->Instance->JDR3;
}

之后编译、下载、调试,监视InJAdc_result[3]这个数组,如果没有BUG的存在则数据应该已经正常转换了,但是我的有BUG!!!!!!!!!!!!

此时打开STM32CubeMX生成的ADC初始化文件adc.c文件中,找到ADC初始化函数的注入通道相关部分就会发现问题:
在这里插入图片描述
图中针对ADC_CHANNEL_5和ADC_CHANNEL_6这两个通道在做初始化时并没有配置注入RANK号,所以注入RANK号会始终默认为ADC_CHANNEL_4下面的ADC_INJECTED_RANK_1,所以ADC注入通道1会被重复刷新,未被配置的通道RANK2和3就会全部默认会ADC_CHANNEL_0,所以我在异常情况下将ADC_CHANNEL_0接地,会将除了1通道外所有通道拉低。

解决方法就是在ADC_CHANNEL_5和ADC_CHANNEL_6的后面添加对应的注入通道RANK号,如下图
在这里插入图片描述
此时再编译下载

ADC_CHANNEL_4接地
在这里插入图片描述
ADC_CHANNEL_5接地
在这里插入图片描述
ADC_CHANNEL_6接地
在这里插入图片描述
一切正常,打完收工,该博客可转载,但要附上出处!!!!!!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

STM32CubeMX在F103上的ADC注入通道配置异常问题 的相关文章

  • MDK-ARM与STM32CubeMX软件的下载及安装

    一 STM32CubeMX 的下载及安装 第一步 xff1a 下载应用软件 1 1 软件下载地址 xff1a www st com stm 32 cubemx 1 2 JAVA开发环境的搭建 xff0c JAVA下载地址 xff1a www
  • STM32CubeMX驱动4x4键盘模块

    文章目录 1 4x4键盘模块简介2 4x4键盘模块原理2 1 独立按键的原理2 2 矩阵键盘的原理 3 移植源码到工程4 实验 1 4x4键盘模块简介 4x4键盘模块是一种常用的电子组件 xff0c 它由16个按钮或开关以矩阵方式排列而成
  • STM32CubeMX系列|串口通讯

    串口通讯 1 串口简介 在串行通信中 xff0c 一个字符一个字符地传输 xff0c 每个字符一位一位地传输 xff0c 并且传输一个字符时 xff0c 总是以 起始位 开始 xff0c 以 停止位 结束 在进行传输之前 xff0c 双方一
  • STM32cubeMx来对单片机串口1进行初始化

    步骤如下 xff1a 打开STM32CubeMX软件并新建一个工程在Pinout amp Configuration选项卡中选择正确的芯片型号 xff0c 然后在Pinout视图中找到串口1相关的引脚 默认情况下 xff0c 串口1使用PA
  • 【干货】STM32通过ADC模拟看门狗实现掉电保存

    1 前言 很多时候我们需要将程序中的一些参数 数据等存储在EEPROM或者Flash中 xff0c 达到掉电保存的目的 但有些情况下 xff0c 程序需要频繁的修改这些参数 xff0c 如果每次修改参数都进行一次保存 xff0c 那将大大降
  • Windows中使用GCC编译STM32CubeMx生成的Makefile文件

    1 下载ARM官方对应Cortex M内核的GCC编译器 xff1a https developer arm com tools and software open source software developer tools gnu t
  • 模数转换ADC模块

    通用基础知识 ADC模块是嵌入式应用中重要的组成部分 xff0c 是嵌入式系统与外界连接的纽带 xff0c 是在测控系统中的重要内容 ADC模块 xff1a 即模数转换模块 AD转换模块 xff0c 功能是将电压信号转换为相应的数字信号 实
  • 基于stm32cubemx和keil的stm32(以stm32F407ZGTx为例)单片机的开发----实现printf函数将信息打印至串口

    一 printf打印函数实验 二 实验步骤 1 在cube里设置引脚 串口 串口5设置成异步 2 生成代码打开工程 别忘了先调试JLink 在main c文件开头添加头文件 在主函数外的用户区书写读取文件流函数 这样就可以使用printf函
  • stm32F4的ADC+DMA+Timer,实现2MHz连续采样。1LSB分辨率,极低噪声。

    1 ADC DMA Timer的实现原理 stm32F407 405的ADC为12位逐次逼近型ADC 有着高达2 4MHz的采样率 分辨率 1LSB 这样参数的ADC放在市面上单卖 也起码是 10 起步 而 stm32F407 405不仅内
  • STM32CubeMX之RTC电子钟

    STM32CubeMX之RTC电子钟 1 简介 实时时钟是一个独立的定时器 RTC模块拥有一组连续计数的计数器 在相应软件配置下 可提供时钟日历的功能 修改计数器的值可以重新设置系统当前的时间和日期 2 特性 可编程的预分频系数 分频系数最
  • STM32F103ZET6 之 ADC+TIM+DMA+USART 综合实验

    1 实验目的 1 使用 TIM1 触发 ADC ADC 采集的数据通过DMA 传至内存 然后通过串口打印出采集的数据 2 学会 DMA 传输数据并将数据进行保存 3 验证ADC 的采样率与实际设置的是否相符 2 硬件资源 1 指示灯 2 A
  • 关于OELD屏显示电池电量的简易方法

    如何采集电源电压大家可能都熟悉 stm32的ADC DMA能很方便迅速的帮我们采集到自己想要的电压数据 使用DMA进行数据搬运也能很好的减轻CPU的一部分压力 但是这样只是第一步 数据 用户想看到的有时候并不是数据 他们想要更直观方便的看到
  • 用 STM32 通用定时器做微秒延时函数(STM32CubeMX版本)

    概述 在使用 DHT11 的时候 时序通信需要微秒来操作 STM32CubeMX 自带一个系统时钟 但是实现的是毫秒级别的 因此就自己用通用计时器实现一个 文章目录 概述 1 配置定时器时钟 2 计数器时钟频率及计数模式 预分频系数 计数器
  • Integral nonlinearity (INL) and differential nonlinearity (DNL) of data converters

    Syntax s inldnl analog digital range type s inldnl Name Value Description example s inldnl analog digital range type cal
  • stm32Cubemx实用篇(一):PWM控制SG90舵机

    stm32Cubemx 一 PWM控制SG90舵机 本章将介绍使用stm32Cubemx软件配置PWM来控制SG90舵机角度 硬件平台 Stm32H743IIT6 舵机 SG90 0 180 旋转范围 网购5元一个 软件 Stmcubemx
  • Linux下使用STM32CUBEMX的makefile,报multiple defination错误的解决办法

    之所以报这个错是因为stm32cubemx生成makefile的一个bug 在C SOURCES部分会重复添加Src 下的c文件 上图是没有修改makefile之前 下图为修改后 要修改的部分
  • STM32CubeMX 生成工程步骤图文说明

    本文也适合STM32CubeMX 支持的所有芯片的设置 调整文章结构 添加图文说明 2022 2 增加其他应用章节 增加 ADC 设置说明 2023 3 考虑到增加的内容越来越多 修改文章标题 增加PWM设置说明 2023 4 增加 DAC
  • simulink仿真 adc 采样ePWM输出例程

    新建文件夹并用matlab打开 写入这两个模块 配置 ADC 配置ePWM 不使能B 关了就行 其他的默认即可 配置烧录 连线 示波器接pwma1 和地 adc chanl1接 3 3v或者 0 3 3 都行 转化是 x 3 3 2 12
  • VS Code 有没有办法导入 Makefile 项目?

    正如标题所说 我可以从现有的 Makefile 自动填充 c cpp properties json 吗 Edit 对于其他尝试导入 makefile 的人 我找到了一组脚本 它们完全可以实现我想要实现的目标 即通过 VS Code 管理
  • 在 Atollic TrueStudio、STM32CubeMX 中导入 C 库

    我目前正在开发 STM32F767ZI Nucleo 板和一个小安全芯片 microchip atecc508a 通过 i2c 连接进行连接 该芯片有一个可用的库加密验证库 https github com MicrochipTech cr

随机推荐

  • 十年寒窗,从高考到海盗,人的梦想是不会结束的

    其实这是讲述我是如何想要成为一名海盗的 又是一年高考时 我翻看着手机 xff0c 看着朋友圈里面各种高考热文一篇篇的出现 xff0c 心里难免有些感慨和一些自己的回忆 当年高考时也像现在一样 xff0c 看到了许多这样的文章 xff0c 看
  • 为体验设计——使用第一

    产品设计和用户体验设计有什么不同呢 xff1f 每个产品都是以用户是人类为前提而设计出来的 xff0c 而产品的每一次使用 xff0c 都会产生相应的体验 用户体验设计并完全不等同于产品设计 但是对于一个简单的情况下 xff0c 创建一个良
  • 用户体验和网站

    用户体验对于所有的产品和服务来讲 xff0c 都是至关重要的 现在讨论一种特殊产品的用户体验 xff1a 网站 xff08 这里的 网站 一词包括以内容为主的网站产品和以交互为主的网站应用 xff09 在网站上 xff0c 用户体验比任何一
  • UCOS II两个任务的模板

    芯片lm3s9b92 include lt includes h gt include 34 utils uartstdio h 34 Application tasks 优先级 define TASK2 PRIO 11 define ta
  • UCOSII 信号量和信号量集实例

    代码来自于书本光盘 嵌入式操作系统UCOSII原理及应用 实例1信号量 include 34 includes h 34 define TASK STK SIZE 512 任务堆栈长度 OS STK StartTaskStk TASK ST
  • 正点原子MiniFly V1.2学习笔记一

    之前看过原子哥的FreeRTOS开发手册 xff0c 但是对整个项目 怎么架构还不是很清楚 由于最近工作需要上FreeRTOS xff0c 所以决定通过MiniFly来学习一下FreeRTOS的架构 一 main 函数 int main s
  • 正点原子MiniFly V1.2学习笔记三---atkpRxAnlTask

    第5个任务 解析处理接收到的指令 xTaskCreate atkpRxAnlTask 34 ATKP RX ANL 34 300 NULL 6 NULL 上面第1个任务 xff0c 把串口接收到的数据解包后得到指令 xff0c 然后把指令发
  • 正点原子MiniFly V1.2学习笔记五---sensorsTask

    这里先学习第8个任务sensorsTask xff0c 2 xff0c 3 xff0c 6 xff0c 7任务后面再学 xff0c 先学重要的 xTaskCreate sensorsTask 34 SENSORS 34 450 NULL 4
  • 嵌入式项目管理学习——001重点明确和心态转换

    相信做嵌入式的码哥们在参与一定数量的产品设计和生产之后 xff0c 都会发现一个问题 xff0c 如果没有一个负责的产品经理 xff0c 就会陷入到产品延期 沟通缺失 目标不清晰 需求不明确等等的问题 xff0c 我目前也是达到了这样一个状
  • 正点原子MiniFly V1.2学习笔记六---stabilizerTask

    第9个任务 xff0c 优先级5 xTaskCreate stabilizerTask 34 STABILIZER 34 450 NULL 5 NULL 一 任务函数 使用绝对延时 xff0c 周期执行任务 二 传感器数据是怎么传到这个任务
  • 正点原子MiniFly V1.2学习笔记七---configParamTask

    第6个任务 xff0c 优先级1 xff0c 最低优先级 配置参数任务 xTaskCreate configParamTask 34 CONFIG TASK 34 150 NULL 1 NULL 一 全局参数configParam 1 参数
  • C++码农要读的经典

    刚大四 xff0c 还在忙着找工作 xff0c 读过的书不是很多 xff0c 还有一些好书在读 xff0c 还有一些书将来必读 C语言程序设计 谭浩强版本 这个版本一致被人说误导子弟 xff0c 当然还有很多人推崇 我觉得这本书不是什么好书
  • 解读gazebo_ros_control gazebo_ros

    本篇的目的是想解读gazebo ros control 以及 gazebo ros 因为gazebo本身是独立于ros的 通过教程Intermediate Control plugin 以及教程 Category Write a plugi
  • vtaskstartscheduler(); //开启任务调度语句不执行

    项目场景 xff1a FreeRTOS实时嵌入式操作系统开发 基于stm32 第一章移植代码 问题描述 xff1a 任务调度器执行到vtaskstartscheduler 开启任务调度语句不执行 span class token keywo
  • python3中定义类变量,并使用类函数修改类变量的值

    定义类变量的方式有两种 1 在 init 中定义self elements 其中self elements是类变量名 a是传入Difference类的参数名 xff0c 这里的 init 作用是定义了类变量名 xff0c 将外部参数a传给类
  • printf函数的内涵以及造成的严重内存问题

    问题的引出 xff1a 在某型号的核心网络交换机设备中 xff0c 为调试方便 xff0c 实现了一个把内存内容从终端打印的功能 xff0c 也就是dump memory xff0c 屏幕的左边显示十六进制 xff0c 右边以ASCII形式
  • 关于docker那点事儿——Dockerfile编写

    Dockerfile编写 前言一 Dockerfile创建镜像二 Dockerfile常用指令三 示例1 Dockerfile构建nginx镜像2 Dockerfile构建微服务 四 CMD与ENTRYPOINT比较 前言 Dockerfi
  • SylixOS信号量(二进制信号量、 计数型信号量、 互斥信号量(简称互斥量)、 读写信号量)

    目录 二进制信号量 互斥信号量 计数器信号量 读写信号量 SylixOS 信号量 多个线程在读写某个共享数据 xff08 全局变量等 xff09 时必须通过某种方法实现共享数据的互斥访问或者同步访问 xff08 例如线程 B 等待线程 A
  • 什么是优先级反转及解决方法

    什么是优先级反转 优先级反转 xff0c 是指在使用信号量时 xff0c 可能会出现的这样一种不合理的现象 xff0c 即 xff1a 高优先级任务被低优先级任务阻塞 xff0c 导致高优先级任务迟迟得不到调度 但其他中等优先级的任务却能抢
  • STM32CubeMX在F103上的ADC注入通道配置异常问题

    前言 最近业余时间在搞无刷电机FOC的控制 xff0c 其中有一部分是关于流过电机三相绕组电流采集的 xff0c 需要用到STM32内置的ADC xff0c 核心是需要使用注入通道以确保ADC数据采集的实时性 xff0c 但是我在STM32