标签: stm32

为什么ch341-uart会与ttyUSB断开连接?

事情是这样的,我想用我的 USB 串口刷新我的 stm32 板。我的stm32板带有一块带有CH340的扩展板。

当我将开发板连接到计算机时,我可以使用命令看到该设备lsusb,输出为Bus 001 Device 039: ID 1a86:7523 QinHeng Electronics CH340 serial converter

ttyUSB但我在路径下找不到该文件/dev

然后我运行dmesg | grep tty,这是输出:

[1182096.667353] usb 1-9: ch341-uart converter now attached to ttyUSB0
[1182096.729868] audit: type=1130 audit(1637925474.011:3648): pid=1 uid=0 auid=4294967295 ses=4294967295 msg='unit=brltty-device@sys-devices-pci0000:00-0000:00:14.0-usb1-1\x2d9 comm="systemd" exe="/usr/lib/systemd/systemd" hostname=? addr=? terminal=? res=success'
[1182096.800144] audit: type=1130 audit(1637925474.081:3649): pid=1 uid=0 auid=4294967295 ses=4294967295 msg='unit=brltty@-sys-devices-pci0000:00-0000:00:14.0-usb1-1\x2d9 comm="systemd" exe="/usr/lib/systemd/systemd" hostname=? addr=? terminal=? res=success'
[1182096.803145] usb 1-9: usbfs: interface 0 claimed by ch341 while 'brltty' …
Run Code Online (Sandbox Code Playgroud)

embedded stm32

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

是否可以#include .c源文件以获得嵌入式C代码的可维护性?

我不是专业的C程序员,我知道包括.c来自另一个的源文件被认为是不好的做法,但我认为它有助于可维护性.

我有一个包含大量元素的大结构,我#define用来保存索引.

#define TOTO_IND 0 
#define TITI_IND 1 
…
#define TATA_IND 50

static const MyElements elems [] = {
    {"TOTO", 18, "French"},
    {"TITI", 27, "English"},
    ...,
    {"TATA", 45, "Spanish"}
}
Run Code Online (Sandbox Code Playgroud)

因为我需要从索引访问结构,所以我需要保持#define和结构声明同步.这意味着我必须在正确的位置插入新元素并相应地更新#define.

它容易出错,我不喜欢它(但出于性能考虑,我找不到更好的解决方案).

无论如何,这个文件还包含很多处理这个结构的函数.我还希望保持代码分离并避免全局变量.

为了使事情变得"更容易",我正在考虑将这个"容易出错的定义"转移到.c仅包含此结构的单个源文件中.这个文件将是"危险的小心文件",并将其包含在我的实际"正常功能"文件中.

你怎么看待这件事?包含.c源文件是否有效?还有另一种更好的方法来处理我的结构吗?

c embedded maintainability performance stm32

29
推荐指数
4
解决办法
4266
查看次数

嵌入式系统上的malloc行为

我目前正在开发一个嵌入式项目(STM32F103RB,CooCox CoIDE v.1.7.6 with arm-none-eabi-gcc 4.8 2013q4),我试图了解当RAM满时如何malloc()表现C.

我的STM32有20kB = 0x5000Bytes的RAM,0x200用于堆栈.

#include <stdlib.h>
#include "stm32f10x.h"

struct list_el {
   char weight[1024];
};

typedef struct list_el item;

int main(void)
{
    item * curr;

    // allocate until RAM is full
    do {
        curr = (item *)malloc(sizeof(item));
    } while (curr != NULL);

    // I know, free() is missing. Program is supposed to crash

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

一旦堆太小而无法分配,我希望malloc()能够返回NULL:

0x5000(RAM) - 0x83C(bss) - 0x200(堆栈)= 0x45C4(堆) …

c malloc memory-management out-of-memory stm32

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

SIGTRAP尽管没有设置断点; 隐藏的硬件断点?

我正在为STM32嵌入式系统调试这个软件.在其中一个函数中,我的程序一直在遇到某种断点:

SIGTRAP,跟踪/断点陷阱

但是,在GDB中,当info breakpoints我得到时No breakpoints or watchpoints.断点实际上对应于我在很久以前设置的断点,在另一个版本的可执行文件中.当我设置断点时,GDB告诉我automatically using a hardware breakpoint on read-only memory(或类似的消息).

我认为硬件断点仍然在我的芯片上,尽管已经加载了新版本的软件.如果确实存在虚假断点,我该如何找到并删除它?

c embedded gdb breakpoints stm32

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

.s文件在C项目中的作用是什么?

我正在使用ARM Cortex M3芯片(STM32F2),ST提供"标准外设库".它有一些有用的.c和.h文件.它还有.s文件.

在C项目的上下文中这些.s文件的目的是什么?如何获取编译器/链接器/?把它们考虑进去?

c embedded stm32

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

如何使用llvm + clang来编译stm32

有人介绍如何使用binutils和newlib构建llvm + clang工具链以及如何使用它?

  • 主机:Linux,AMD64
  • 目标:cortex-m3,stm32
  • c-lib:newlib
  • 汇编程序:gnu as

arm cortex-m3 llvm clang stm32

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

STM32F4 UART HAL驱动程序

我正在试图弄清楚如何使用这个新的HAL驱动程序.我希望使用HAL_UART_Receive_IT()设置设备的数据来接收数据时运行中断功能.

问题是你必须在中断触发之前指定要读取的数据长度.我计划像不同长度的命令一样发送控制台,因此不能有固定的长度.我假设唯一的方法是一次读取单个字符并构建一个单独的字符串.

HAL驱动程序似乎有一个问题,如果您设置HAL_UART_Receive_IT()接收x字符数,然后尝试发送多个x字符,将出现错误.

目前我不知道我是否正确的方式,任何想法?

hal stm32 stm32f4discovery

18
推荐指数
2
解决办法
6万
查看次数

ARM(Cortex M3)的应用程序内编程如何工作?

我正在开发一个基于Cortex-M3的自定义设备,我需要实现应用程序内编程(IAP)机制,这样就可以在没有JTAG的情况下更新设备固件(我们将使用TFTP或HTTP).虽然ST Microelectronics提供的与IAP相关的代码示例对我来说足够清楚,但我并不真正了解重新闪存的工作原理.

据我所知,CPU通过ICode总线(当然还有预取块)从Flash获取指令.所以,这是我非常愚蠢的问题:为什么运行程序在重新闪烁时会被破坏(即更改运行它的闪存)?

embedded arm cortex-m3 stm32

16
推荐指数
2
解决办法
7273
查看次数

未配置时STM32 WWDG中断触发

由于许可证问题,我有一个应用程序,我从Keil IDE移植到使用GNU工具链构建.我已经成功地能够在设备上设置,构建,刷新和运行应用程序.

GNU端的应用程序由于某种原因被卡在WWDG的弱链接IRQ处理程序中,这是一个无限循环.应用程序未启用WWDG,默认情况下在重置时禁用.我还验证了配置寄存器的默认启动值.

除编译器之外,唯一的区别是链接器和启动文件.但是,两个工具链使用的启动文件和链接器文件都是STM生成的默认值.

知道可能导致这种情况的原因吗?我在这里结束了我的智慧.

使用stm32f103XX,让我知道是否有任何其他信息会有所帮助.

编辑:使用下面的评论,我能够确定它实际上是正在被触发的HardFault_Handler.如果可能有帮助,我已经在下面包含了回溯输出

GDB BT:

0 HardFault_Handler()

1(信号处理程序调用)

2 0x720a3de在?? ()

3 foo(0x80005534)

Backtrace已停止:前一帧与此帧相同(损坏的堆栈?)

2件事对我来说很突出,虽然我没有gdb专家.1)foo不是一个函数,它是一个const数组的字符和2)0x0720a3de不是一个有效的内存地址,闪存地址范围从0x08000000开始

embedded arm gnu cortex-m3 stm32

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

gcc-arm-none-eabi 11.3“未实现并且总是会失败”

我正在开发一个裸机 STM32 项目,在 Linux x64 主机上进行编译。

将我的工具链从 升级到 后gcc-arm-none-eabi-11.2-2022.02arm-gnu-toolchain-11.3.rel1-x86_64-arm-none-eabi我收到以下链接器警告:

warning: _close is not implemented and will always fail
warning: _fstat is not implemented and will always fail
warning: _getpid is not implemented and will always fail
warning: _isatty is not implemented and will always fail
warning: _kill is not implemented and will always fail
warning: _lseek is not implemented and will always fail
warning: _open is not implemented and will always fail
warning: _read is not …
Run Code Online (Sandbox Code Playgroud)

c embedded gcc arm stm32

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