标签: stm32

仅在LSI/LSE/HSE中Stm32L中的RTC时钟配置?

我正在使用IAR编译器在STM32L152RB Discovery板上实现实时时钟.我在HSI上实现了时钟配置,并使用PLL将其乘以4. Code - >

/* Enable HSI Clock */
RCC_HSICmd(ENABLE);

/*!< Wait till HSI is ready */
while (RCC_GetFlagStatus(RCC_FLAG_HSIRDY) == RESET);

RCC_PLLConfig(RCC_PLLSource_HSI,RCC_PLLMul_4,RCC_PLLDiv_2);
RCC_PLLCmd(ENABLE); 
while (RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET);

/* Set HSI as sys clock*/
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
Run Code Online (Sandbox Code Playgroud)

问题是在配置实时时钟时我必须将辅助时钟LSE设置为RTC时钟源,在我的情况下,我的源时钟是HSI.根据我所知,其余的步骤包括启用PWR控制器,启用rtc域访问,rtc时钟源,rtc_init(),然后设置时间和gettime.这是我试过的代码 - >

/* Enable RTC clocks and rtc related functions */
RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);
PWR_RTCAccessCmd(ENABLE);

RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE);  //This part I think is wrong
RCC_RTCCLKCmd(ENABLE);
RTC_InitTypeStructure.RTC_HourFormat=RTC_HourFormat_12;
RTC_InitTypeStructure.RTC_AsynchPrediv=0x7F;
RTC_InitTypeStructure.RTC_SynchPrediv=0xFF;
RTC_Init(&RTC_InitTypeStructure);
/* End RTC Clock */
RTC_TimeTypeTime.RTC_Hours=18;
RTC_TimeTypeTime.RTC_Minutes=11;
RTC_TimeTypeTime.RTC_Seconds=4;
RTC_TimeTypeTime.RTC_H12=RTC_H12_PM;
RTC_SetTime(RTC_Format_BIN, &RTC_TimeTypeTime);
while(1){
    f_SleepMs(10);
    RTC_GetTime(RTC_Format_BIN, &RTC_TimeTypeTime);
    RELEASE_MSG("\r%d:%d:%d",RTC_TimeTypeTime.RTC_Hours,RTC_TimeTypeTime.RTC_Minutes,RTC_TimeTypeTime.RTC_Seconds);
}   
Run Code Online (Sandbox Code Playgroud)

我得到的输出是 …

c embedded real-time stm32

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

两个USART中断溢出错误

在STM32F2上使用两个以115200波特率运行的USART,一个用于与无线电模块通信,另一个用于从PC进行串行通信.时钟速度为120MHz.

当同时从两个USART接收数据溢出时,可能会在一个USART或另一个USART上发生错误.快速回退包络计算应该有足够的时间来处理两者,因为中断只是简单地将字节复制到循环缓冲区.

在理论和测量中,将字节推送到缓冲区的中断代码应该/确实以2-4μS的顺序运行,在115200波特处我们有大约70us处理每个字符.

为什么我们在一个或另一个USART上看到偶尔的ORE?

更新 - 其他信息:

  1. 我们的代码中没有其他ISR此时正在触发.
  2. 我们正在运行Keil RTX,其中systick中断配置为每隔10mS触发一次.
  3. 我们目前没有禁用任何中断.
  4. 根据本书(Cortex-M处理器系列的设计者指南),中断延迟大约为12个周期(并非真正致命)

鉴于上述所有70us在我们清除中断的时间内至少是10倍 - 所以我不确定它是如此容易解释.我是否应该断定我必须考虑其他一些因素?

MDK-ARM是版本4.70

指纹中断由RTOS使用,因此无法计时其他ISR每个字节需要2-3μS才能运行.

embedded serial-port interrupt stm32

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

STM32板的RAM,堆和堆栈存储器

我正在开发一个需要至少500 kB内存的项目.我有一个SDK,用这个代码定义堆栈和堆,它工作正常.

Stack_Size      EQU     0x00004000

            AREA    STACK, NOINIT, READWRITE, ALIGN=3
Stack_Mem       SPACE   Stack_Size
__initial_sp


; <h> Heap Configuration
;   <o>  Heap Size (in Bytes) <0x0-0xFFFFFFFF:8>
; </h>

Heap_Size       EQU     0x00200000

            AREA    HEAP, NOINIT, READWRITE, ALIGN=3
__heap_base
Heap_Mem        SPACE   Heap_Size
__heap_limit
Run Code Online (Sandbox Code Playgroud)

但是,我正在尝试将相机和LCD屏幕功能集成到此SDK中,当我这样做时,至少会调出LCD屏幕的堆栈和堆的最高值如下所示.任何高于此值且LCD屏幕保持黑色且应用程序似乎不运行.

Stack_Size      EQU     0x00004000

            AREA    STACK, NOINIT, READWRITE, ALIGN=3
Stack_Mem       SPACE   Stack_Size
__initial_sp


; <h> Heap Configuration
;   <o>  Heap Size (in Bytes) <0x0-0xFFFFFFFF:8>
; </h>

Heap_Size       EQU     0x00002B50

            AREA    HEAP, NOINIT, READWRITE, ALIGN=3
__heap_base
Heap_Mem        SPACE   Heap_Size
__heap_limit
Run Code Online (Sandbox Code Playgroud)

我需要在第二个代码示例中使用堆栈和堆的大小来匹配第一个代码示例中的大小,这样我就不会因为没有可用内存而陷入硬故障异常循环.为什么增加堆大小会使我的项目变得更糟?这意味着当我增加堆大小时,它甚至不会出现? …

c++ embedded stm32 keil

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

STM32CubeMX USB CDC VCP?

我已经找到了大量的例子,但没有提到如何从STM32MXCube"正确"地做到这一点.

如何从STM32CubeMX创建用于USB CDC虚拟COM端口通信的骨架代码(如果可能的话,STM32F4发现)?

usb stm32 stm32f4discovery

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

如何在stm32f4上使用硬件NSS(SPI)?

所以我尝试将硬件NSS信号与HAL库一起使用,但我找不到任何使NSS引脚具有低电平或高电平的功能.我也试图在HAL文档中找到答案,但也没有任何信息.Internet中的所有示例仅包含NSS软件.如何使用硬件NSS?

microcontroller arm spi stm32 stm32f4discovery

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

Arduino millis()在stm32

我想尝试将一些Arduino库移植到stm32.在Arduino中,millis()返回自引导以来的毫秒数.在stm32中是否有等效的功能?我正在使用stm32f0 MCU.

microcontroller arduino stm32 milliseconds stm32f0

8
推荐指数
2
解决办法
8064
查看次数

使用HAL驱动程序在stm32上进行EEPROM仿真

我试图在stm32f0上模拟EEPROM.STM提供了一份应用说明.

在样本中main.c,

int main(void)
{
  /*!< At this stage the microcontroller clock setting is already configured, 
       this is done through SystemInit() function which is called from startup
       file (startup_stm32f0xx.s) before to branch to application main.
       To reconfigure the default setting of SystemInit() function, refer to
       system_stm32f0xx.c file
     */  
   /* Unlock the Flash Program Erase controller */
  FLASH_Unlock();

  /* EEPROM Init */
  EE_Init();

/* --- Store successively many values of the three variables in the EEPROM ---*/ …
Run Code Online (Sandbox Code Playgroud)

stm32 flash-memory eeprom stm32f0

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

如何使用 WinUSB?

这是我上一个问题的后续,需要为 USB 外围设备编写驱动程序吗?

背景

我正在使用 STM32 微控制器(裸机/无操作系统)设计 USB 外围设备。该设备偶尔会连接到 Windows PC,并在每个方向传输几 KB 的数据。将有一个定制的 PC 应用程序来控制数据传输,使用专有协议(即 USB 有效负载)。

PC 将始终是主机(启动器)——它将发送命令,设备将发出响应,在单个命令或响应中的任一方向最多有几百字节的数据。我想我会想使用 USB 批量传输模式。

选项 1 - USB CDC

据我了解,一种选择是我可以使用 USB 通信设备类 (CDC)。在设备端,我可以使用来自 ST 的示例代码用于 USB CDC,例如来自STM32Cube。在 PC 端,设备将显示为虚拟 COM 端口 (VCP)。然后在软件中,我基本上有一个原始的双向流,在此之上我必须定义我的消息格式、命令等。

  1. 我是否正确解释了这一点?

选项 2 - WinUSB

我在思考这到底是什么以及如何使用它时遇到了麻烦。

  1. WinUSB 与 USB 设备类的关系是什么?它似乎充当“通用”USB 类,但我找不到任何说明它的文档。

  2. WinUSB 是否提供任何内置的消息分隔符?例如,WinUsb_WritePipe是否将缓冲区的内容作为原子单元发送到设备?或者我只是获得像 VCP/UART 这样的原始流?

  3. 如何在设备上实现 WinUSB?有可用的示例代码吗?(最好是 STM32。)

选择

  1. 在为我的应用程序选择选项 1 和选项 2 时,有哪些相关考虑因素?

usb cdc stm32 winusb

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

Windows 10 - 清除 USB 枚举/驱动程序碎片

概括

我正在使用STM32F072 探索板为自定义 USB 设备开发固件和 PC 测试应用程序。该设备包括 Microsoft Windows 兼容 ID (WCID),以便在 PC 上自动安装WinUSB 驱动程序。

该设备在其他 Windows 10 主机上被正确枚举,但在我的 Windows 10 开发 PC 上没有。我的开发 PC 之前曾尝试枚举具有相同 VID/PID 组合但具有不同描述符/元数据的设备。如果我将 PID 更改为其他数字(我的开发 PC 的新数字),它确实会正确枚举。

问题

  1. 我怎样才能让它在我的开发 PC 上与我想要的 VID/PID 组合一起工作?
  2. Windows 缓存 USB 元数据是否是这台 PC 上枚举失败的原因?
  3. 在设备描述符和元数据不断变化的阶段,(Windows)PC 端用于测试/开发 USB 设备固件的最佳实践是什么?是否有可能避免咀嚼 PID 只是为了避免 Windows 缓存?

细节

由于 Windows 从以前的枚举中缓存 USB 描述符等的方式,在固件开发过程中,每次我进行其他更改后,我都会增加固件中的设备产品 ID (PID),以确保 Windows 不会缓存来自描述符的先前迭代,并弄乱了本来可以工作的东西。

现在,我已将该设备作为 WinUSB 设备在 Windows 7、8 和 10 PC 上成功枚举,并且已建立通信。但是,当我将固件改回使用我开始使用的 VID/PID,然后将设备连接到我的开发 …

windows usb driver stm32 winusb

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

关于STM32 HAL的质量和性能

我即将开始一个基于经典STM32L4的产品的新项目.我在ARM开发方面有很好的经验,但在STM32中则没有.我想知道STM32提供的STM32 HAL和低级驱动程序的质量和性能是什么(在STM32Cube包中).我想收集有关该主题的开发人员经验和反馈.基本上我想知道你是否对这段代码感到满意,或者相反如果你遇到一些问题,如果有些人因为某些原因开发了自己的驱动程序等等......谢谢!

arm stm32

8
推荐指数
3
解决办法
4365
查看次数