小编Fly*_*man的帖子

类成员函数指针

我正在尝试使用类函数(中断服务例程),

void (ClassName::*fp)(void)=ClassName::FunctionName;
Run Code Online (Sandbox Code Playgroud)

并使用具有以下类型输入的功能将其连接到Arduino中断引脚,但不起作用.

void attachInterrupt(int, void (*)(void),int);
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?中断服务例程(ISR)需要访问私有对象数据,因此我无法在类之外创建函数.

我的编译错误:

ClassName.cpp : : In constructor 'ClassName::ClassName()':
ClassName.cpp : *)()'
ClassName.cpp : *)()' to 'void (*)()' for argument '2' to 'void attachInterrupt(uint8_t, void (*)(), int)'
Run Code Online (Sandbox Code Playgroud)

注意:我正在课堂上寻找解决方案,并接受向我展示解决方案的答案,或者告诉我这是不可能的.

c++ function-pointers arduino

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

STM32L0的自动波特率检测

我不能让自动波特率检测工作STM32L0.我正在使用硬件抽象层(HAL).

我的初始化代码是:

/* USART1 init function */
void MX_USART1_UART_Init(void)
{

  huart1.Instance = USART1;
  huart1.Init.BaudRate = 300;
  huart1.Init.WordLength = UART_WORDLENGTH_9B;
  huart1.Init.StopBits = UART_STOPBITS_1;
  huart1.Init.Parity = UART_PARITY_EVEN;
  huart1.Init.Mode = UART_MODE_TX_RX;
  huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;
  huart1.Init.OverSampling = UART_OVERSAMPLING_16;
  huart1.Init.OneBitSampling = UART_ONEBIT_SAMPLING_DISABLED;
  huart1.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_AUTOBAUDRATE_INIT;
  huart1.AdvancedInit.AutoBaudRateEnable = UART_ADVFEATURE_AUTOBAUDRATE_ENABLE;
  huart1.AdvancedInit.AutoBaudRateMode = UART_ADVFEATURE_AUTOBAUDRATE_ONSTARTBIT;
  HAL_UART_Init(&huart1);


}
Run Code Online (Sandbox Code Playgroud)

我通过UART1发送的字节是:

        0   1   2   3   4   5   6   7   8   
000x    68  0B  0B  68  53  FD  52  FF  FF  .. etc.

0x68 = 0b01101000
0x0B = 0b00001011
0xFD = …
Run Code Online (Sandbox Code Playgroud)

c embedded stm32 baud-rate stm32ldiscovery

5
推荐指数
1
解决办法
2005
查看次数

开始在 IAR 中为 stm32l0 编写引导加载程序

在 IAR 中为 stm32l0 添加自定义引导加载程序的适当步骤是什么?以下问题不清楚:

  • 我要创建一个新的 IAR 项目吗?
    • 如果是,我是否像普通项目一样编写引导加载程序,只是更改我的原始 .icf 文件,以便引导加载程序有一个小 ROM 和一个小 RAM 区域?
    • 如果不是,除了 icf 文件和代码之外,我还需要在 IAR proejct 中配置哪些内容?
  • 我还需要考虑哪些其他事情?

我很难开始这个。

所以icf将用于主要项目:

__region_ROM_start__ = 0x08000000;
__region_ROM_end__ = 0x08008FFF;
Run Code Online (Sandbox Code Playgroud)

所以 icf 将用于引导加载程序项目:

__region_Bootloader_ROM_start__ = 0x08009000;
__region_Bootloader_ROM_end__ = 0x08009FFF;
Run Code Online (Sandbox Code Playgroud)

和关于0xFFRAM的同样的事情?

c embedded stm32 bootloader iar

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