问题标签 [stm32f0]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
websocket - STM32 + ESP8266 Websocket 客户端从服务器获取 HTTP/1.1 400 Bad Request
我正在与 ESP8266 Wifi 模块接口的 STM32F070 微控制器上开发一个小型物联网项目。我在 STM32F070 控制器上开发了一个 Websocket 客户端应用程序,它将与远程 Websocket 服务器通信并通过连接交换数据。
我从 Websocket 客户端与服务器建立 TCP 连接,但在发送 Websocket 请求标头后,我收到来自服务器的 HTTP/1.1 400 Bad Request 并且连接被关闭。
以下是来自 ESP8266 UART 线路的日志:
这是我发送到远程 Websocket 服务器的标头
编辑:STM32F070 Source Code to send Websocket Headers to server over ESP8266
源代码中的 HTTP 标头:
这是 Node Js 中的 WebSocket 服务器代码。
NodeJs WebSocket Server 使用 Mobile WebsocketClient Tester Android Application进行测试。它工作正常
编辑2:
我尝试连接http://echo.websocket.org/,我修改了代码以连接http://echo.websocket.org/。我可以成功连接http://echo.websocket.org/。收到来自http://echo.websocket.org/的响应
这里是日志供参考。
input - STM32F091 定时器输入捕捉中断被忽略
我对 STM32 和 Keil 中的 C++ 编码相当陌生,我正在为我当前的项目提供一些帮助。我正在使用 Barth STG-850 PLC 样板,它是一个 STM32F091CC 芯片,具有大量 I/O、CAN 外设等。我用它来读取和传输 can 数据以设置某些变量,以及发送速度读数从通过 CAN 的定时器输入来操作巡航控制。到目前为止,我已经成功地设置了主要代码,配置了 I/O,配置了 CAN 外设,并且我已经开始编写定时器输入捕获代码。在 Keil 中使用调试,我看到定时器正在初始化,正在计数,并且在检测到定时器输入引脚上的上升沿时,该值存储在捕获比较寄存器中。从这一点来看,void 函数应该被触发,但它并没有被执行。在我的主要,我有以下几点:
被调用的函数是
由于某种原因,代码没有被调用,我不知道为什么!启用了全局中断,我尝试过使用不同的计时器等,但没有帮助。所有的中断处理都是在stm320fxx_hal_tim.c中配置的,所以不需要放在main.c文件中吗?
如果有人可以提供帮助,将不胜感激!!谢谢。
free - 如何分配空闲闪存区域(IAR下的STM32)
在目标上的代码闪存期间,我将数据存储到特定地址的闪存中,并在代码运行时更新(有时)这些数据。
我选择的内存地址是默认的,只是因为它是免费的(代码的任何部分都没有存储在那里)。
问题:
我已经对代码进行了一些更新,编译器/链接器现在将部分代码存储在同一个闪存页面上,就在我故意存储的数据旁边,这不能让我重写数据,因为我需要为此拳头擦除页面..
我刚刚将我的数据放在另一个空闲的地方和页面上,现在可以了,但我想知道如何“预订”页面(或闪存区域),然后告诉编译器/链接器不要使用它来存储代码(但仍可用于数据)。
注意:它适用于 STM32F030K6T6,我正在使用 IAR。
can-bus - STM32F091 CAN 不传输(另外,示例使用了不存在的功能???)
我有一块 STM32F091RCT 板,我正试图强迫它充当临时 CAN 节点。为了有个起点,我查阅了一些代码示例。我从这个开始,但它引用了一些类型定义(例如CanTxMsgTypeDef
)和函数(HAL_CAN_Transmit
例如),它们似乎不存在于stm32f0xx_hal_can.h
标题中。因此,我选择了一个用于 F103 的示例,最后得到了这段代码(自动生成的注释和与 CAN 无关的东西被删除):
所以我希望这会在主循环的每次迭代中通过 CAN 总线传输一条消息。MX_CAN_Init()
不幸的是,情况似乎并非如此,因为连接到 CAN_TX 引脚的示波器(也尝试使用 RX 进行良好测量)仅显示执行时电压从 0 V 上升到 3.3 V。为了澄清起见,我在收发器 (MCP2551)之前直接测量来自 MCU 的信号。
我怀疑我在这里遗漏了一些非常明显的东西......有人会碰巧知道那个非常明显的东西是什么吗?也许是控制器引脚上的伪冲突(TX 和 RX 之间的差异),而控制器只是无限期地等待它?
stm32 - STM32 HAL UART接收中断清理缓冲区
我正在开发一个应用程序,在该应用程序中处理通过 UART 接收的固定长度的命令。
我也在使用 FreeRTOS,处理传入命令的任务被挂起,直到调用 uart 中断处理程序,所以我的代码是这样的
如果发生溢出,我正在使用 ErrorCallBack。现在我成功地捕获了每个正确的命令,即使它们是逐字符发出的。
但是,我试图通过考虑接收到比预期更多的字符的情况来使系统更加防错。
命令长度为 4,但如果我收到例如 5 个字符,那么前 4 个字符会正常处理,但是当收到另一个命令时,它会从最后一个未处理的字符开始,因此在我可以正确处理命令之前需要另外 3 个字符再次。
幸运的是,每当我收到超过 4 个字符时都会调用 ErrorCallback,所以我知道它什么时候发生,但是我需要一种强大的方法来清理 UART 缓冲区,这样以前的字符就消失了。
我能想到的一种解决方案是使用 UART 一次接收 1 个字符,直到它不再接收,但是有没有更好的方法来简单地刷新缓冲区?
raspberry-pi - 如何调试stm32F0可以RX
我有一个定制的 stm32F0 板连接到一个带有 CAN 屏蔽、终端电阻和所有东西的树莓派上。我可以在 STM32F0 上发起一条消息并在 RPI 端看到它,但反之则不行。将示波器放在罐头线上,我看到来自 RPI 的消息。同样,我看到了 can 收发器和 STM32F0 之间的消息,所以我知道消息正在到达引脚。做 Rx 的代码看起来很简单:
- 设置 CAN
- 禁用过滤器(通过将过滤器设置为 0x0000)
- 使用 HAL_CAN_ActivateNotification 设置可以 RX
- 为 can rx 中断设置回调函数
然而,中断永远不会被触发。我的 CAN RX 引脚坏了吗?如何继续调试过程?
这是整个 main.c:
interrupt - 在 STM32CUBEIDE 中启用可以中断丢失
在我看到的每个指南中(例如https://www.dailyduino.com/index.php/2020/06/01/stm32-can-bus/)它都指出我需要通过去(在 ioc 上)启用 can 中断引脚和配置-> 连接-> CAN -> NVIC 设置-> 启用可以中断。但是当我去那里时,我看到的只是“hdmi-cec 和全局中断/ hdmi-cec 通过 exti line 27 唤醒中断”。单击该复选标记似乎对我的情况没有帮助。设备正在确认 CAN 消息,但代码没有中断,我永远不会在回调中结束。
这是简化的代码:
它似乎通过 IRQhandler 直到它到达:
它进入“hcan->RxFifo0MsgPendingCallback(hcan);”的位置 而不是回调“HAL_CAN_RxFifo0MsgPendingCallback(hcan);”
我可以通过转到项目设置并将该标志设置为 0 来解决这个问题。不幸的是,现在我陷入了稍早的部分
其中中断是 2,CAN_IT_RX_FIFO0_FULL 是 4,所以我没有进入标志部分。不确定这两个设置是什么意思。
c - 当我在 STM32 上激活 ADC 中断时,程序停止工作
我编写了生成方脉冲的代码。一切正常,直到我通过 NVIC 命令激活 ADC 中断。ADC IRQ Handler 是否正确编写?(我对 Handler 似是而非)。ADC 设置为仅使用一个通道的连续模式。End_of_Conversion 和 End_of_Sequence 中断标志已设置。
stm32 - 第二次使用函数导致程序停止
我创建了用于操作驱动 1602 LCD 端口的函数。
但是在 main() 中,当第二次使用这个函数时,程序崩溃了,并且在调试模式下,所有的电阻都变成了“目标不可用”。我使用联合来访问输入字符值的片段。使用后是否需要清除或销毁联合,否则会在作用域结束时销毁?为什么第二次 send_8_bit_command 函数会导致程序挂起?