Questions tagged «stm32»

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

2
为什么我不能通过RS232成功发送消息?
因此,过去一周我一直在努力获取从STM32F407发送的UART消息,并使用白蚁通过ugreen RS232到USB电缆在笔记本电脑上读取它。 我已经使用STMCube生成代码并通过阅读“ stm32f4xx_hal_uart.c”文件顶部的相关说明来添加代码(并观看了大量视频并在线阅读)。 我已经在示波器上检查了传输的消息,它匹配了它的ASCII表示形式。 例如,我发送的“ Q”为0101 0001,我收到的“ W”为01010111。示波器上的读数显示: 白蚁输出的信号与示波器上显示的相同。 我已经确认白蚁和代码中的波特率/奇偶校验/ HWcontrol匹配。 为了获得正确的字符,我尝试降低和提高波特率。 我尝试使用不同的字符集来尝试查找导致显示错误字符的模式。 另外,我尝试了其他终端,例如在Putty或Teraterm上。
9 stm32  uart  rs232 

2
STM32F407 + LAN8720A + lwIP + FreeRTOS =未收到以太网帧
我正在尝试使用STM32F407和LAN8720A以太网PHY的PCB,尽管接收帧没有问题,但我似乎无法接收到任何以太网帧。 硬件设定 我在STM32F4上有一个25 MHz的晶体,将25 MHz的时钟输出引脚驱动到处于REF_CLK_OUT模式的LAN8720A中,并将50 MHz的时钟驱动回STM32F4,作为RMII接口的一部分。 插孔/磁铁是通用部分。这是数据表: 软件 我正在使用最新的STM32CubeMX为STM32项目生成系统工作台,其中包含FreeRTOS,lwIP和ETH外围设备驱动程序。我还没有真正接触过任何生成的代码,因此lwIP堆栈在FreeRTOS堆栈内进行了初始化。 实验 在将主板的lwIP配置为10.0.0.2静态IP并将计算机上的USB到以太网加密狗配置为10.0.0.1静态IP的情况下,我使用以太网电缆直接连接了两个设备,并且主板尝试连接到计算机端口80上的服务。我使用Wireshark(在计算机上运行并绑定到USB到以太网转换器)捕获了主板和计算机之间的交互。 由于没有收到帧的问题,我们永远也不会 错过ARP的东西: 如您所见,Stmicroe(我的主板)可以发送ARP数据包(计算机可以听到),但是似乎从未听到过计算机的响应,因为它不断爆破ARP数据包。 这两个设备都配置有255.255.255.0掩码,并且都配置有10.0.0.1(计算机)的网关地址。我听说过ARP表被搞砸了,并且计算机忽略了ARP数据包,但是我无法想象该板将忽略我的计算机专门针对它的ARP数据包-响应板首先提出的要求。 因此,我深入研究了lwIP的ethernetif.c文件,并注意到该HAL_ETH_GetReceivedFrame_IT(&heth)错误返回了错误。该函数返回错误,因为(heth->RxDesc->Status & ETH_DMARXDESC_OWN)== 0,而不是1。我的意思是说DMA缓冲区当前为MAC外设设防,还没有收到任何东西。 此外,我已经验证了HAL_ETH_IRQHandler不会被调用。 PHY有问题吗? 在这一点上,我怀疑我的PHY本身应该受到指责。 为了进一步调查,我将Saleae Logic Pro 16连接到所有相关信号,并注意到TX0 / TX1和RX0 / RX1线路上都有大量流量。这是使用25 MHz输入时钟的一些RX流量的捕获: 除非我试图捕获50 MHz的时钟输出,否则RX_ERR始终处于低电平状态(这对Saleae这样的设备来说显然是具有挑战性的):在这种情况下,RX_ERR偶尔会被高电平地擦除几个数据包(这实际上是一个好兆头) —插针似乎在起作用)。 下一步 我尝试通过在任务中调用HAL_NVIC_EnableIRQ(ETH_IRQn);after tcpip_init()被调用来手动启用ETH中断MX_LWIP_Init(),但这似乎无法解决问题。我不能完全确定以太网中断例程是否应该被调用 -这是提出全新设计的挑战。我正在努力确定系统的正确行为,因此可以确定我的设置有何不同。 虽然我以前使用过STM32 / STM32CubeMX / FreeRTOS,但我从未使用过STM32的以太网外设,而我对这种东西的唯一经验是在定制嵌入式Linux系统上,这似乎总是开箱即用。这对我来说是新领域! 我确定某个地方有一个愚蠢的复选框或Ethernet_EnableReceive()我忘记调用的神奇函数,但是我真的找不到任何建议显式启用该功能的文档,而我在互联网上看到的帖子都是由于不相关问题。 如果有人有任何想法,我希望获得帮助! 附录:摆脱FreeRTOS 为了消除问题,我删除了FreeRTOS项目组件,回到了裸机项目。在主循环中,我致电MX_LWIP_Process()。这种方法应该消除对中断的需求,但是不能解决问题。我仍然无法接收帧。这使我认为STM32CubeMX生成的ETH HAL代码中有某些内容。 解 以防万一将来有人偶然发现这个问题,该问题原来是由RXD0和RXD1引脚引起的。这就是为什么我可以在逻辑分析仪上看到流量的原因,但是我的MCU没有对它进行解码。 …

2
将嵌入式编程从Keil移至Linux
我目前正在使用Keil开发STM32发现板。我的项目即将完成,我想迁移到基于Linux的构建环境。我一直在使用预配置的刷新工具和用于Windows的STLink驱动程序来刷新电路板,并且让keil导出了bin文件,我设法使用qSTLink2在Linux机器上刷新了该文件。到目前为止,一切都很好。 现在,我一直在坚持构建整个项目的过程。特别: 如何将.uvproj移植到makefile中,同时考虑诸如“ startup_stm32l1xx_md.s”启动文件之类的内容?
9 stm32  linux  gcc  keil 

1
这些微控制器引脚输入/输出模式是什么意思?
我买了一个stm32f103ret6。当我看到参考手册时,我看到它有几种I / O模式。 输入:浮动,上拉,下拉 输出:模拟,漏极开路,推挽 我已经使用具有三态和上拉功能的AVR MCU。因此,我可以理解上拉和下拉,但是我不能理解浮动,模拟,漏极开路,推挽模式。这些模式是什么意思,什么时候使用?

4
STM32 ADC噪声2
我刚刚用STM32F2测试了我的第二个设计,现在是STM32F207ZFT6,ADC的性能与我的第一个应用程序相同-ADC中的强噪声。 未连接任何信号的电流输入噪声: 注意:在上面的信号图中,垂直轴是ADC位而不是伏特!不要被它的图例“ [V]”所迷惑,在本测试中,我们使用经过修改的程序来查看粗略的ADC数据。 即使CPU模拟引脚短路到GND,也会出现相同的噪声,如下所示: 我认为,采样信号中存在超过30 LSB的永久性峰值,甚至更多,尽管它们不应超过5-10 LSB。 另一个细节: 2面PCB,在底面上还有其他连接,但大多数连接是GND信号-数字和模拟通用,模拟地没有分开。由于电路板的功耗极小,低于100 mA,因此我认为它不会引起此类噪声。 参考电压VREF 3.3V由运算放大器缓冲,被100nF和钽电容并联10uF阻断,与VREF / 2相同;每个处理器电源引脚均被100nF电容阻塞 在我们较旧的应用程序中,我们使用了相同的设计概念,但是所使用的处理器是AduC834。它也有12位ADC,信号噪声只有几个LSB,没有问题。主要区别在于使用了AduC的内部参考电压,没有外部参考电压 我们已经测试过将处理器模拟接地引脚与板的公共GND断开连接,并用额外的导线将其直接连接到参考电压VREF接地,没有影响 它是三相网络测量设备,有3个模拟电压通道和3个电流通道,带有可切换的增益前置放大器。CPU振荡器为25 MHz,内部时钟为PLL的120 MHz,ADC时钟为30 MHz(符合技术规格),我们已经测试过将主内部时钟(因此也包括所有辅助时钟)降低到四分之一,但没有任何影响 ADC周期性地采样输入信号,每50 Hz网络周期进行128次转换,即每156微秒。结果通过DMA传输到内部RAM中;来自RAM的数据通过绝缘的RS485(在另一块板上)传输,并在我们的程序中可视化。我们试图将转换时间延长到最大,但没有效果 除CPU外,只有3个opam,2个模拟开关,I2C温度计和3个ULN开关(测试期间未使用),由线性LF33稳定器供电,通常由另一块板上的开关提供的5V DC供电,但是在测试过程中,开关为断开连接,LF33由清晰的实验室5V直流电源供电。我敢肯定,除了处理器振荡器以外,其他都无法在板上振荡。 用示波器检查信号没有决定性的结果,信号太弱 有这个处理器系列ADC性能经验的人吗? 关于信号强度:即使模拟输入短路,在示波器上我也会看到5-10 mV(峰对峰)的噪声-用同轴电缆测得,该接地电缆的最小接地线焊接到板上。使用标准探头时,噪声可能大约是接地不良的两倍(一般的EMC噪声?)。 这是我的董事会的形象: 和董事会的底部: 如上所述,即使信号接地,ADC转换后的数据中仍然存在约30 LSB的噪声。
9 adc  noise  stm32 

2
VBUS感应输入的5V容差
我正在围绕STM32L476设计设备。我的设备主要由电池供电,但是有一个USB端口,插入该端口后,我想用作备用电源(通过3.3V稳压器)以限制电池消耗。用户也可以在没有电池的情况下连接USB端口。 我希望能够感应到何时连接了USB端口,因此我将PA9用作OTF_FS_VBUS。 好消息:数据表显示PA9引脚可承受5V电压。 坏消息:5V耐压引脚似乎只有在上电时才是5V耐压的。数据表§6.2表18说: FT_xxx引脚上的最大输入电压:最小值(VDD,VDDA,VDDIO2,VDDUSB,VLCD)+ 4.0V 在我的情况下,如果没有电池并且用户连接了USB端口,则在稳压器启动之前的一段时间内,PA9上的电压将为5V,而CPU电源引脚上完全没有通电。 更坏的消息是:不允许当前注入:数据手册§6.2,表19说: FT_xxx上的注入电流:-5 / + 0(请参阅注释4) 注4:VIN> VDDIOx引起正注入,而VIN <VSS引起负注入。绝对不能超过IINJ(PIN)。 因此,在稳压器启动期间,似乎无法使用简单的电阻来限制PA9上的过量电流。显然禁止在VDD上升之前从VBUS流到PA9的任何电流。 其他人做什么? 我看了很多围绕STM32芯片的设计,看了他们的VBUS连接,他们似乎并不在乎。他们将VBUS直接连接到PA9,或者最终通过一个电阻器连接,但是我再也没有看到任何更复杂的东西。但是它们大多是开发板,所以我想坚固性(是一个词吗?)不是很重要。而且它们通常不通过USB端口供电,并且可以肯定用户在为电路板供电之前不会连接USB端口。 我有什么计划? 将其放在USB端口的VBUS和MCU的PA9引脚之间: 我真的试图保持简单。基本上,它可以确保VUSB_CPU(PA9引脚)永远不会高于VCPU + 4V(Vz + Vbe),如果可以的话不会消耗任何功率。 我的主要问题是:我的分析正确吗?这条电路是一个好的解决方案吗?我是否担心无关紧要的事情?为什么似乎没有其他人关心这个潜在问题? 附加问题:我计划使用USB OTG。如果连接器和PA9引脚之间有一个4.7k电阻,那会是一个问题吗?我猜应该是在SRP期间是否必须使用VBUS脉冲,但是这种方法显然已被弃用。那么我好吗,无论我的设备的角色(设备/主机)是什么? 最后一个:VDDUSB电源引脚消耗的最大电流是多少?数据表中为USB外设指定:AHB时钟域为16.4µA / MHz,独立时钟域为23.2µA / MHz,但我们不知道从何处绘制它(VDD或VDDUSB)。
8 usb  stm32  usb-otg 

4
STM32 USB VCP错误
我过去两个星期一直在研究一个项目,整整一个星期都在调试这个问题。我想知道是否有人可以提供帮助,所以我会尽量保持清晰明确。 我正在尝试在基于STM32F302K8(Cortex M4)的微控制器上实现USB虚拟通信端口。我已经使用STM32CubMX生成了设置实现CDC类的USB全速设备所需的代码。我的设备同时显示在Windows(设备管理器)和Linux中。我能够基于示例代码实现一个简单的回显功能,但是当我现在尝试使用功能USBD_CDC_SetTxBuffer将数据发送到PC时,这将启动一个硬故障处理程序。我将范围缩小到以下事实:从未初始化UsbDeviceFS.pClass(USBD_CDC_SetTxBuffer所需)字段,因为从未在USB设备的初始化中调用USBD_CDC_Init()。 我已经在ST论坛上记录的示例代码中实现了对多个错误的修复(包括更改堆大小,修复USBD_CDC_TransmitPacket中的传输标志以及将CDC_DATA_HS_MAX_PACKET_SIZE的大小从512更改为256),但仍然出现相同的错误。 我的设备设置代码是 * USB Device Core handle declaration */ USBD_HandleTypeDef hUsbDeviceFS; /* init function */ void MX_USB_DEVICE_Init(void) { /* Init Device Library,Add Supported Class and Start the library*/ USBD_Init(&hUsbDeviceFS, &FS_Desc, DEVICE_FS); USBD_RegisterClass(&hUsbDeviceFS, &USBD_CDC); USBD_CDC_RegisterInterface(&hUsbDeviceFS, &USBD_Interface_fops_FS); USBD_Start(&hUsbDeviceFS); }
8 usb  stm32 

1
没有上拉电阻,STM32上的SPI将无法工作,即使如此,其性能也很差
我一直在尝试使STM32F103C8(蓝色药丸板)上的SPI1 正常工作一段时间。在我刚刚开始学习ARM时,我只是在尝试将数据移至74HC595移位寄存器并对其进行锁存以点亮一个字节的LED。我没有回读任何数据,所以我只有MOSI,SCK和SS线路。 起初我什么都没有得到,但是阅读一些在线示例后,我可以解决这些第一个问题,以使通信正常进行(我需要正确设置GPIOA引脚并设置软件SS)。 现在的主要问题是,如果我在所有线路(MOSI,SCK和SS)上均未包括上拉电阻,则微控制器在任何线路上均不会输出任何内容(已通过示波器检查)。最重要的是,在添加上拉电阻之后,脉冲的上升时间非常慢,因此我不能使用太高的频率(对于10kΩ上拉电阻,我限于约250 kHz SCK,并且切换至330Ω(约4 MHz)。我正在试验板上,但是即使使用AVR和更杂乱的布线,我也可以得到一个4 MHz SPI,而无需添加任何电阻就可以正常工作,并且波形更清晰。 这是两张图片(抱歉,我的示波器屏幕处于极低状态),它们以250 kHz的时钟传输字节0b01110010。顶部轨迹为SCK,底部轨迹为MOSI。第一张图带有10kΩ上拉电阻,第二张图带有330Ω上拉电阻,这些波形使波形更好看(但不需要)。 我将不胜感激,以帮助您找出正在发生的事情。 我的代码的相关部分是: #define SS_LOW GPIOA->BSRR |= 1 << 4 + 16; #define SS_HIGH GPIOA->BSRR |= 1 << 4; // SPI GPIO configuration RCC->APB2ENR |= RCC_APB2ENR_IOPAEN; GPIOA->CRL |= 0b0011 << 4 * 4; // Set pin A4 as PP out …

4
STM32F303 MCU的中断等待时间
我正在一个涉及STM32 MCU(确切地说是STM32303C-EVAL板上)的项目中,该项目必须响应外部中断。我希望对外部中断的反应尽可能快。我已经从ST网页上修改了一个标准外围设备库示例,并且当前程序仅在PE6的每个连续上升沿切换一个LED: #include "stm32f30x.h" #include "stm32303c_eval.h" EXTI_InitTypeDef EXTI_InitStructure; GPIO_InitTypeDef GPIO_InitStructure; NVIC_InitTypeDef NVIC_InitStructure; static void EXTI9_5_Config(void); int main(void) { /* Initialize LEDs mounted on STM32303C-EVAL board */ STM_EVAL_LEDInit(LED1); /* Configure PE6 in interrupt mode */ EXTI9_5_Config(); /* Infinite loop */ while (1) { } } // Configure PE6 and PD5 in …

2
清除STM32中的USART(UART)中断标志?
我正在使用STM32F105通过UART与Linx GPS芯片进行通信。 如果我不使用中断(如果我只是轮询RX标志),那么它将正常工作。但是当尝试使用中断时,我得到了意外的结果。 例如,如果仅使用启用RXNE(“ RX不为空”)中断USART_ITConfig(USARTx, USART_IT_RXNE),则该代码仅应针对该特定事件引导至ISR。但是,中断也会因溢出条件而触发。 至于清除标志,似乎方法取决于标志。为了清除溢出标志(USART_IT_ORE),用户手册说明我应该先读取USARTx_SR寄存器,然后再读取USARTx_DR寄存器。这确实有效;该标志被清除。 还有一个USART_ClearITPendingBit()功能,但是只接受一小部分标志。 有八个可以选择使能的中断源,以及十个不同的标志。 是否有关于如何管理所有这些标志的摘要?

3
STM32F0x1比较器(COMP)和ADC同时在同一引脚上吗?
我正在整理一个利用STM32F051微控制器上的比较器外设的项目。我已经阅读了文档,为了使比较器正常工作,需要将输入引脚配置为模拟...如果您将该引脚用作ADC输入,则设置相同。 我可以使用单个引脚(例如PA1)作为输入并将其配置为窗口比较器输入和ADC_IN1上的ADC输入吗? 我是否应该考虑这种配置的陷阱,例如额外的噪声? 数据表(p 19) 参考手册(p 295) 一个有趣的参考,建议应该可行: 摘自AN4232:STM32F3系列模拟比较器入门
8 stm32  stm32f0 

4
ST-LINK可以进行串行通讯吗?
我正在使用STM32F4发现板和适用于ARM Lite 3的Atollic TrueStudio 我想使用printf将一些调试数据传递到PC,但找不到通过STLink进行调试的方法。可能吗 对于任何调试过程,它似乎都是必不可少的功能。 编辑:我需要使用串行线查看器,但仍然无法使它工作。
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.