Questions tagged «stm32f4»

STM32是STMicroelectronics的第三个ARM系列。它遵循了较早的基于ARM9E内核的STR9系列和基于ARM7TDMI内核的STR7系列。STM32基于ARM Cortex-M内核家族。

5
CMSIS,HAL和标准外设库
因此,我从PIC切换到ARM,并购买了STM32F4发现板。到目前为止,我了解要进行编程,您可以直接(以明显的方式)访问内存中的所有寄存器,还可以使用3个主要的库来简化生活。现在我的问题是,这3个中的哪一个(CMSIS,HAL,Std Peripherals Lib)是最低电平的?即。开销较小的那一种。我的目标是学习控制器的内部工作原理,而不是让我的生活变得更轻松(仅一点点),因此我想知道其中哪些更接近核心而不使用组装。
29 arm  stm32  stm32f4  cmsis 

3
STM32F4和HAL
因此,我一直在尝试使用STM32F407(我是ARM的新手),并决定使用HAL库编写一个简单的应用程序,因为ST似乎已经停止了标准外围设备库。所以我的问题是,HAL有什么意义?StdPeriph是否正在履行职责?他们为什么要为HAL停产呢?在我看来,HAL真是一团糟。 该文档是AWFUL的文档,至少对于StdPeriph而言,有一个完整的参考文献,其组织得很好,可以轻松找到所需的内容(http://stm32.kosyak.info/doc/)。对于HAL,有一个结构看似随机的不完整的PDF(http://www.st.com/st-web-ui/static/active/jp/resource/technical/document/user_manual/DM00105879.pdf)。阅读任何部分,例如有关外围设备的内容,我似乎都无法理解配置和正确定制它的要求。它看起来更像是不想忘记东西的人的个人笔记,而不是参考。 我知道我可以使用CubeMX初始化GPIO并配置外设,但是我的目标是自己做,所以我更好地了解它们的操作,而没有一款软件可以为我完成全部工作。难道我做错了什么?是我中的ARM新手使我感到困惑吗?还是现有文档不好?
23 arm  stm32  stm32f4 

6
如何在STM32上使用printf函数?
我试图弄清楚如何使用printf函数打印到串行端口。 我当前的设置是STM32CubeMX生成的代码和带有STM32F407发现板的 SystemWorkbench32 。 我在stdio.h中看到printf原型定义为: int _EXFUN(printf, (const char *__restrict, ...) _ATTRIBUTE ((__format__ (__printf__, 1, 2)))); 这是什么意思?该函数定义的确切位置在哪里?找出如何使用这种功能输出的一般要点是什么?

1
Stm32事件和中断
我开始研究stm32上的中断,特别是stm32f4发现板。我发现了这个示例,在该示例中,您必须按下按钮才能启动中断,然后再次按下以使其停止。 在这一行:EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt我们必须选择中断模式或事件模式。我将其更改为事件模式,但似乎不起作用。因此我得出的结论是,处理程序仅在中断执行的情况下执行。 如果您无法在事件发生时执行一些代码,为什么还要在stm32上使用事件? 这是代码: #include "stm32f4xx.h" #include "stm32f4xx_syscfg.h" #include "stm32f4xx_rcc.h" #include "stm32f4xx_gpio.h" #include "stm32f4xx_exti.h" #include "misc.h" EXTI_InitTypeDef EXTI_InitStructure; void EXTILine0_Config(void); void LEDInit(void); void ExtInt(void) { LEDInit(); /* Configure EXTI Line0 (connected to PA0 pin) in interrupt mode */ EXTILine0_Config(); /* Generate software interrupt: simulate a rising edge applied …


4
使用HAL的STM32 ADC转换
我正在尝试学习如何从stm32使用“新” HAL库。 当我尝试进行简单的ADC转换时,它只能运行一次,但随后会停止转换。我想转换结束标志未设置。我正在使用STM32f429I发现板,板上有STM32f429ZI。 请注意,我知道sprintf是一种不好的做法,并且使带有中断的adc更好,我知道,请不要指出这一点,这与问题无关,我只是在这里测试HAL。 所以问题是为什么未设置EOC标志,或者我应该怎么做才能使其正常工作?谷歌搜索没有太大帮助,因为那里关于HAL的好材料很少。 这是代码: __IO uint16_t ADCValue=0; void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc); int main(void) { char str[15]; /* Various initializations */ HAL_ADC_Start(&hadc1); while (1) { if (HAL_ADC_PollForConversion(&hadc1, 1000000) == HAL_OK) { ADCValue = HAL_ADC_GetValue(&hadc1); sprintf(str, "%d", ADCValue); BSP_LCD_DisplayStringAt(130,30, (uint8_t*)str, LEFT_MODE); } } void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc) { ADCValue = HAL_ADC_GetValue(&hadc1); } …

1
STM32“ USB设备”与“ USB OTG HS”的区别是什么?
我最近下载了stm32应用进行MCU搜索,发现例如STM32F429在“ USB Device”外设中为“ NO”,而在“ USB OTG FS”和“ USB OTG HS”中为“ YES”。由于STM32F429可以完全作为USB设备使用,即它支持所有库和USB类,因此这非常令人惊讶。 其他一些MCU中标有“ USB设备”,例如。STM32L052 然后我尝试检查CubeMX,发现他们的搜索中有USB_Device外设(同样STM32F429不包含它,USB东西是通过OTG完成的)。 这个问题可能很容易回答,因为我怀疑USB设备只是意味着不支持OTG的设备,但是我不确定,通常MCU还是会使用OTG(而且只有一个库,所以为什么USB中的状态为“ NO”外设)。我在Google或CubeMX文档中找不到有关它的信息。 由于USB OTG HS似乎可以正常使用该库,因此我对此并不十分担心,但是我对术语感到好奇。 我知道ST论坛可能是解决此问题的好地方,但是很多话题只是在两年过去之后才得到解答。:) 谢谢。

2
STM32F4立方体HAL UART。是错误还是我错过了什么?
我正在使用基于中断的UART IO(无DMA)。 HAL_UART_Transmit_IT功能设置寄存器中的EIE位CR3。根据STM32F407数据表(以及实际行为),这仅在多缓冲区模式下(当DMAR位置1 时)产生中断。EIE使能针对帧错误(FE),溢出错误(ORE),噪声错误(NE)的中断生成。据我了解,此错误仅用于接收。 部分HAL_UART_IRQHandler功能: tmp1 = __HAL_UART_GET_FLAG(huart, UART_FLAG_ORE); tmp2 = __HAL_UART_GET_IT_SOURCE(huart, UART_IT_ERR); /* UART Over-Run interrupt occurred ----------------------------------------*/ if((tmp1 != RESET) && (tmp2 != RESET)) { __HAL_UART_CLEAR_OREFLAG(huart); huart->ErrorCode |= HAL_UART_ERROR_ORE; } if(huart->ErrorCode != HAL_UART_ERROR_NONE) { /* Set the UART state ready to be able to start again the process …

1
STM32F4启动概念和向量表重定位
在STM32F4微控制器的启动过程中,有些事情我不了解。 我的理解如下: ARM Cortex-M4引导程序期望堆栈指针初始化值和上的中断向量0x00000000 + SCB->VTOR,而SCB->VTOR在复位时被清除。 该位置没有内存。闪存从处开始0x08000000,SRAM 从处开始0x20000000。 为了使启动成为可能,µC可以将闪存或SRAM存储器范围映射到0x00000000。要映射的存储器范围由启动引脚的状态定义。 我的问题: 为什么STM32F4参考手册在第69页上说 当器件从SRAM启动时,在应用程序初始化代码中,您必须使用NVIC异常表和偏移寄存器在SRAM中重新定位向量表。 ?在我看来,这是没有必要的,因为整个内存区域还是会被别名的。有趣的是,当将闪存区域重新映射到0x0空间时,似乎并不需要这样做。 我可以认为,从SRAM引导的唯一用途是减少开发过程中闪存的写周期。从复位释放µC之前,您需要使用调试器将程序写入SRAM,然后从那里启动。但是,由于您具有调试器访问权限,因此无论如何从哪里引导都没有任何限制。那么为什么要具有此功能? 引导位置是从引脚导出的(至少在我看来)表明此功能不是在开发期间使用,而是在最终操作中使用。并且在最终操作中,SRAM在启动时是清除的。因此,从SRAM引导是没有意义的。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.