标签: microcontroller

免费波表合成器?

我需要在 ARM Cortex-M3 内核中实现波表合成器。我正在寻找任何代码或工具来帮助我入门。

我知道这个 AVR 实现。我实际上不久前将其转换为 PIC。现在我正在寻找类似的东西,但听起来更好一点。

ANSI C 代码会很棒。任何代码片段(C 或 C++)、示例、工具或只是一般信息将不胜感激。

谢谢。

audio microcontroller arm synthesizer sound-synthesis

2
推荐指数
1
解决办法
4740
查看次数

在复位皮质 m3 上保留一些 RAM 值

单击板上或 Kiel 上的重置按钮后,有没有办法保留一些 ram 值或全局变量

我正在使用 STM32L152ZE

embedded microcontroller cortex-m3 stm32 stm32l152

2
推荐指数
1
解决办法
5480
查看次数

轮询与中断?

假设您有一个具有 32 深度 FIFO 的设备,其中在转换完成后存储来自 ADC 的数据。每次 FIFO 中有 X 个样本时,您都可以触发中断并从中获取数据。

当中断触发时,设备上的中断寄存器中的一个位被设置并且中断线被断言。

所以我的问题是:轮询中断寄存器以获取数据与使用中断线的功能有什么不同吗?是否有任何时间问题或我应该注意的任何问题?

microcontroller interrupt fifo

2
推荐指数
1
解决办法
2万
查看次数

STM32L151 RTC闹钟中断

我遇到了 STM32L151 的 RTC 警报中断问题。我希望我的程序每秒进入 RTC 警报中断,但它不起作用。我的主要功能:

int main(void)
{
  HAL_Init();
  SystemClock_Config();
  MX_GPIO_Init();
  MX_IWDG_Init();
  MX_RTC_Init();
  MX_SPI1_Init();
  MX_USART1_UART_Init();

  __HAL_RTC_ALARM_ENABLE_IT(&hrtc, RTC_IT_ALRA);

  while (1)
  {

  }
}
Run Code Online (Sandbox Code Playgroud)

函数配置 RTC: MX_RTC_Init():

void MX_RTC_Init(void)
{
  RTC_TimeTypeDef sTime;
  RTC_DateTypeDef sDate;
  RTC_AlarmTypeDef sAlarm;

  hrtc.Instance = RTC;
  hrtc.Init.HourFormat = RTC_HOURFORMAT_24;
  hrtc.Init.AsynchPrediv = 127;
  hrtc.Init.SynchPrediv = 255;
  hrtc.Init.OutPut = RTC_OUTPUT_DISABLE;
  hrtc.Init.OutPutPolarity = RTC_OUTPUT_POLARITY_HIGH;
  hrtc.Init.OutPutType = RTC_OUTPUT_TYPE_OPENDRAIN;
  HAL_RTC_Init(&hrtc);

  sTime.Hours = 0x14;
  sTime.Minutes = 0;
  sTime.Seconds = 0;
  sTime.TimeFormat = RTC_HOURFORMAT12_AM;
  sTime.DayLightSaving = RTC_DAYLIGHTSAVING_NONE;
  sTime.StoreOperation = RTC_STOREOPERATION_RESET;
  HAL_RTC_SetTime(&hrtc, &sTime, FORMAT_BCD);

  sDate.WeekDay …
Run Code Online (Sandbox Code Playgroud)

microcontroller interrupt stm32 real-time-clock stm32l152

2
推荐指数
2
解决办法
1万
查看次数

AURIX TriCore 链接器脚本命令“REGION_MAP”

我正在改编一些来自相当新的 AURIX TriCore MCU 的链接器脚本。

有一个我根本不明白的命令,文档 [0] 并没有真正的帮助。

在此处输入图片说明

有人可以告诉我原则上发生了什么吗?“全局地址”是什么意思,“核心本地地址”是什么意思?

[0] 英飞凌科技股份公司:TriCore 开发平台,2015。 - 手册

microcontroller linker linker-scripts

2
推荐指数
1
解决办法
1414
查看次数

8 位微控制器可以使用 32 位整数吗?(反之亦然)

我真的很想知道数据表的关系以及这如何改变编程级别的工作方式,

据我所知,uC 中的 8 位是 ADC 的分辨率,最高可达 256 个信号可以采样的值,你走得越高,采样信号的精度就越高,但是......

这会影响代码吗?(代码上的所有内容都是 32 位的吗?)

每当我在 32 位 uC 中声明 int 时,我实际上使用的是 int32 吗?还是int8?

c embedded microcontroller

2
推荐指数
1
解决办法
2467
查看次数

void* (*)() 和 void* 有什么区别?

在我的一个程序中,我收到错误

invalid conversion from 'void* (*)()' to 'void*' [-fpermissive]
Run Code Online (Sandbox Code Playgroud)

我试图了解这两种数据类型之间的区别。这很令人困惑。

我认为这些数据类型是:
void* (*)()所以这个数据类型是一个指向 void ( void*)的指针,它还有另一个指针 ( (*)),并且出于某种奇怪的原因,它有空括号。所以我想象的这种数据类型的内存看起来像|--void address--|--pointer of unknown type--|--something denoting no arguments--|

然后是void*。这看起来很简单,它只代表一个函数的地址。内存模型应该像|--void address--|.

为什么这么奇怪,是抛出错误的函数如下。

void callFunction(void *voidThing){
void *testVariable = voidThing;
}
Run Code Online (Sandbox Code Playgroud)

据我所知,这会创建一个指针类型的 testVariable,并且该指针指向 void。该函数还接受一个指针类型的参数,该指针也指向 void。

为什么编译器会抛出错误,即使局部变量与参数类型相同?就两者的内存占用而言,变量之间有什么区别?

c++ microcontroller types pointers avr

2
推荐指数
1
解决办法
132
查看次数

STM32闪烁的LED错误寄存器?

有谁知道为什么代码不起作用?

RCC->AHBENR |= RCC_AHBENR_GPIOBEN;
GPIOB->MODER &= ~(0x3u << 6u);
GPIOB->MODER |= (0x1u << 6u);
for (int i = 0; i < 1000; i++) {
    GPIOB->ODR |= (0x1u << 0x3u);
}
Run Code Online (Sandbox Code Playgroud)

我使用的是 STM 板 (STM32L432KC),它有一个集成 LED,称为 PB3 引脚(端口 26),但在闪烁后没有任何反应。实际上应该有一个发光二极管。我是否使用了正确的寄存器?

c microcontroller stm32

2
推荐指数
1
解决办法
382
查看次数

嵌入式系统:使用汇编语言时的内存布局

根据我的理解,嵌入式系统运行机器代码。有多种方法可以生成此代码。一种是用 C 等高级语言编写程序并使用编译器来获取此类代码。另一种方法是用汇编语言为该嵌入式系统编写指令,并使用汇编程序将其转换为机器代码。现在我们得到了加载到系统并执行的机器代码。程序代码存储在非易失性存储器中。

现在,如果程序代码是从 C 编译器获得的,我知道以下内容:代码包含多个部分:

  • .text: 实际指令
  • .bss:已声明但未定义的变量
  • .data:声明和定义的变量
  • .rodata:声明和定义的只读变量(“const”)

然后,在启动时 .bss 和 .data 被(在大多数情况下)加载到 ram 中。然后,堆栈指针放置在数据段之后,堆指针放置在 ram 的末尾,以便在执行过程中,它们再次相互增长。

已编译程序的内存布局

现在的问题是,如果我用汇编语言编写代码,事情会怎样?根据我的理解,应该没有像上面那样的部分(在程序代码或 ram 中),只有代码(相当于 .text)。我可以手动访问内存地址并从那里写入和读取,但没有堆栈和堆之类的东西。这种描绘是否正确?

embedded microcontroller assembly bare-metal

2
推荐指数
1
解决办法
288
查看次数

微控制器中的定时器/预分频器

也许这是一个愚蠢的问题:

我有内部 20 MHz 振荡器、16 位定时器和预分频器(1、2、4、8、16、32、64、128),我想产生 1 毫秒的延迟。我知道怎么做 - (20 000 000 / 1) / 1000 = 20 000 -> 将此值放入 16 位寄存器,它就可以工作了。

使用预分频器 2 和 4,我得到相同的结果 1ms - (20 000 000 / 2) / 1000 = 10 000 和 (20 000 000 / 4) / 1000 = 5 000

我的问题是如何确定使用哪个预分频器?也许,我必须选择预分频器 4,因为这个值 (5000) 更接近 0,我的计时器从 0 开始计数到 ​​5000。如果我选​​择 10 000,计时器将计数 2 x 5000。

先感谢您 !

embedded microcontroller

2
推荐指数
1
解决办法
319
查看次数