• while(1)的main()循环停止通过STM32F072CBT6的ADC DMA访问执行

    我正在使用DMA从我的ADC访问数据。 ADC的值永久更改。 我读到可以使用DMA,因此可以随时随地使用ADC的值。 问题在于我的Main while()循环没有执行或仅执行了一次。 DMA Interupt调用。 HAL_ADC_Start_DMA(&hadc, (uint32_t*) &buffer, 1); 这是启动ADC的DMA的代码。模式是循环的。 这是初始化: void SystemClock_Config(void) { RCC_OscInitTypeDef RCC_OscInitStr...
  • 在C ++中嵌入式OO状态机的最佳设计是什么?

    我正在尝试为微控制器在C ++中实现面向对象的状态机。我研究了状态设计模式,但发现由于动态内存分配,大多数示例都不适合嵌入式应用程序,因此我想出了自己的方法: 我的主要考虑因素是:有关状态行为的所有信息都存储在函数中。其他方法对每个状态使用虚拟函数和派生类。这使我想到了一个问题:我应该在哪里实例化所有这些状态对象。我不想让所有State对象都弄乱我的主代码。这导致我采用这种方法,而没有为每个状态使用单独的实例: A abstract StateMachine class which contains the...
  • 如何在c中创建位图数据?

    我正在尝试在中创建位图数据,这是我使用的代码,但我无法弄清正确的逻辑。这是我的代码 bool a=1; bool b=0; bool c=1; bool d=0; uint8_t output = a|b|c|d; printf("outupt = %X", output); 我希望我的输出为“ 1010”,相当于十六进制“ 0x0A”。我该怎么做 ??
  • 实时逆矩阵计算

    我一直在开发实时工作的C语言控制软件。该软件尤其实现了受控系统的离散状态空间观察器。为了实现观察者,有必要计算4x4维矩阵的逆。逆矩阵计算必须每50微秒完成一次,值得一提的是,在这段时间内,还将进行其他耗时的计算。因此,逆矩阵计算必须消耗少于50微秒的时间。 我一直在寻找一种有效的方法来做到这一点。我的一个想法是准备用于计算矩阵4x4的行列式的通用公式和用于计算4x4矩阵的伴随矩阵的通用公式,然后根据以下给定的公式计算逆矩阵 您如何看待这种方法?感谢您的任何想法。
  • 嵌入式C ++-虚拟析构函数和堆内存

    I'm developing a bare-metal C++ program for Texas Instruments' TMS320F28054M MCU, and am building my project with the TMS320C2000 C/C++ Compiler v20.2.2.LTS. I've noticed that whenever I instantiate a class with a virtual destructor, the toolchain automati...
  • 在STM32上使用DMA复制16位数据

    How do I use DMA to copy ADC data into a 16-bit buffer? The STM32F373 has a 16-bit ADC that can be read using the HAL function: HAL_StatusTypeDef HAL_SDADC_InjectedStart_DMA(SDADC_HandleTypeDef *hsdadc, uint32_t *pData, uint32_t Length) This DMA initialize...
  • C ++使用变量(编译时)条目数初始化函数指针数组

    对于嵌入式解决方案,我想定义一个void(* relay)(void)函数数组,该函数用作仅接受状态较少的void(* f)(void)回调的库的回调中继。然后,中继将调用实际的std :: function回调。 下面的代码运行良好。但是,我正在寻找一种更改中继功能的可能性而不必手动将其初始化类型输入到数组的可能性。编译时的解决方案很好,但在运行时初始化数组也可以。 有机会在C ++中实现这样的事情吗? constexpr size_t nrOfRelays = 5; std::function<voi...
  • STM32L4R5的SystemClock配置出现问题

    我最初在CubeMX上生成的项目正在32MHz上工作。由于我试图实现80MHz的ADC,因此决定将系统时钟提高到100MHz。我在源代码中所做的更改位于main.c中: void SystemClock_Config(void) { RCC_OscInitTypeDef RCC_OscInitStruct = {0}; RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; RCC_PeriphCLKInitTypeDef PeriphClkInit = {0};...
  • 强制转换返回强制类型的函数的返回值

    我想从编译器中预先知道将强制类型转换为还强制转换返回值的函数时会发生什么。我想知道显式类型强制转换返回值的优点和缺点。 static uint16_t sResult_U16; static uint16_t GetMyResult(void) { return (uint16_t)sResult_U16; } 与 static uint16_t GetMyResult(void) { return sResult_U16; } 如果返回类型与函数类型不同,编译器将翻译什么?例如...
  • PC作为微控制器?

    是否可以将插入主板的Intel / AMD x86 CPU与RAM一起使用,以达到与微控制器相同的目的(使用计时器生成信号,执行低电平信号处理等)?
  • Opus编解码器在编码和解码时每帧丢失1/3

    这项开发工作都是在STM32H743ZI2 Nucleo开发板上用C语言完成的,对于此基本示例,我要做的全部工作是生成2KHz正弦波,编码单个帧,然后立即对其进行解码,因此与Opus提供的trivial_example.c代码。 看起来编码器和解码器正在工作,但是我可能会丢失一些设置,因为解码后的正弦波的前三分之一仅在0上下略微振荡。 这是我用于编码/解码的设置: 帧大小= 960(20毫秒) 采样率= 48000 分辨率= 16位(+/- 32768) 比特率= 24000 频道= 1 应用= VOIP...
  • ESP8266在不联网的情况下发送和接收数据

    我希望两个NodeMCU ESP8266相互通信,但我不希望它们在网络中。我在考虑发射机可以一直广播数据包,而接收者可以使用混杂模式来捕获和读取数据包。这该怎么做? 编辑: 如果使用ESP8266无法做到这一点,那么有一块芯片可以做到这一点(可能是Raspberry PI和NodeMCU等等)。
公告

《从零开始开发BBS》课程上线啦,快来跟着我一步步搭建属于你的BBS吧。

课程地址:https://www.shiyanlou.com/courses/1436
9折优惠邀请码: ZHwfIjb1

该课程会带领大家一步步的了解并熟悉Go语言开发,如果你是一个Go语言初学者,或者正准备学习Go语言,那么这个课程非常适合你。如果你熟练掌握了本课程中的知识点,相信你就已经入门Go语言开发,并能胜任日常的开发工作了。