一转四USB转TTL模块
经常会遇到USB转TTL模块不够用的情况,因此这次直接搞一个一转四的USB转TTL模块,这下总够用了吧; 原理图 设计原理图 PCB PCB图 PCB仿真图(正面) PCB仿真图(反面) 在线BOM BOM 实物图 实物图(正面) 实物图(反面) 四个COM口!!!!
经常会遇到USB转TTL模块不够用的情况,因此这次直接搞一个一转四的USB转TTL模块,这下总够用了吧; 原理图 设计原理图 PCB PCB图 PCB仿真图(正面) PCB仿真图(反面) 在线BOM BOM 实物图 实物图(正面) 实物图(反面) 四个COM口!!!!
这个是关于LOG分级打印的配置,并有时间戳,基于STM32H7和gcc; 环境 STM32H743IIT6、STM32CubeMX、GCC、MakeFile printf映射 usart.c中加入以下代码 #include "stdio.h" /*# 7- Retarget printf to UART (std library and toolchain dependent) #########*/ #if defined(__GNUC__) int _write(int fd, char *ptr, int len) { HAL_UART_Transmit(&huart1, (uint8_t *)ptr, len, HAL_MAX_DELAY); return len; } #elif defined(__ICCARM__) #include "LowLevelIOInterface.h" size_t __write(int handle, const unsigned char *buffer, size_t size) { HAL_UART_Transmit(&huart1, (uint8_t *)buffer, size, HAL_MAX_DELAY); return size; } #elif defined(__CC_ARM) int fputc(int ch, FILE *f) { HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, HAL_MAX_DELAY); return ch; } #endif #ifdef __GNUC__ #define PUTCHAR_PROTOTYPE int __io_putchar(int ch) #else #define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f) #endif /* __GNUC__ */ /** * @brief Retargets the C library printf function to the USART. * @param None * @retval None */ PUTCHAR_PROTOTYPE { HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, HAL_MAX_DELAY); return ch; } MakeFile中删除以下配置: ...
windows11下如何烧录uboot镜像呢?当然是用windows下的dd命令了; 首先下载dd.exe,并将其命名为dd.exe,将其加入系统变量; http://www.chrysocome.net/downloads/ddrelease64.exe 测试如下图所示即安装成功: 然后已有u-boot-sunxi-with-spl.bin,因而插入SD卡,输入以下命令: dd.exe if=.\u-boot-sunxi-with-spl.bin of=d:\temp.img bs=1024 seek=8 然后使用DiskImager将temp.img镜像烧录进SD卡即可。 感觉之后生成的各种镜像只要组合成一个大的image就可以。
使用buildroot构建系统的话,如果在output/build中对某个软件包修改的话,一旦使用make clean,就会导致自己做的修改被抹除;为避免这个情况,buildroot是提供了一种机制,也即OVERRIDE_SRCDIR; 参考:https://www.cnblogs.com/pwl999/p/15534966.html Buildroot的一般操作是下载tar包、提取、配置、编译和安装该tar包内的软件。源代码提取保存在临时目录output/build/-目录中,当执行make clean时,该目录会被完全删除,并在下一次make时重新创建。即使将Git或Subversion等版本管理系统作为软件包源代码的输入,Buildroot也会从中创建一个tar包,然后像对待一般tar包一样工作。 这种方式非常适合将Buildroot当做集成工具,编译和集成嵌入式Linux系统的所有组件。但是,如果是在开发系统的某些组件的过程中使用Buildroot,这种方式非常不方便:开发者希望对一个软件包的源代码做少许修改,并能够使用Buildroot快速重建系统。 直接修改output/build/-不是合适的解决方案,因为该目录会在make clean时删除。 因此,Buildroot针对该场景提供了一种特殊的机制,即_OVERRIDE_SRCDIR机制。Buildroot读取一个override文档,该文档允许用户告诉Buildroot某些软件包的源代码位置。 覆盖文档(override)的默认位置是$(CONFIG_DIR)/local.mk。由BR2_PACKAGE_OVERRIDE_FILE配置选项定义。$(CONFIG_DIR)是Buildroot .config文档的位置,因此local.mk默认情况下与.config文档放在一起,这意味着:这意味着: Buildroot目录树内构建时位于Buildroot顶层目录中(当O=不使用时) Buildroot目录树外构建时位于目录树外目录(当O=使用时) 如果需要不同于这些默认值的位置,可以通过BR2_PACKAGE_OVERRIDE_FILE配置选项指定。 在这个override文档中,Buildroot期望找到以下形式中的行: _OVERRIDE_SRCDIR = /path/to/pkg1/sources _OVERRIDE_SRCDIR = /path/to/pkg2/sources 例如: LINUX_OVERRIDE_SRCDIR = /home/bob/linux/ BUSYBOX_OVERRIDE_SRCDIR = /home/bob/busybox/ 当Buildroot发现给定的软件包存在_OVERRIDE_SRCDIR定义时,它将不再尝试下载、提取和修补软件包,它将直接使用指定目录中可用的源代码,并且make clean时不会涉及该目录。这允许将Buildroot指向您自己的目录,该目录可以由Git、Subversion或其他版本控制系统管理。为此,Buildroot将使用rsync将软件包的源代码从_OVERRIDE_SRCDIR指定的位置复制到output/build/-custom/目录。 该机制最好与make -rebuild和make -reconfigure结合使用。make-rebuild all将rsync源代码从_OVERRIDE_SRCDIR到output/build/-custom(只有修改过的文档会被复制),并重新启动这个软件包的构建过程。 在上述Linux软件包的示例中,开发人员可以修改 /home/bob/linux目录下的源代码,然后运行: make linux-rebuild all 并在几秒钟内在output/images中获得更新后的Linux内核映像。类似地,可以在/home/bob/busybox和后面对BusyBox源代码进行更改: make busybox-rebuild all output/images中的根文档系统映像包含更新后的BusyBox。 大型项目一般有成百上千的文档,很多文档对于构建时是不需要的,但是会减慢rsync复制源代码的过程。可选的,可以定义_OVERRIDE_SRCDIR_RSYNC_EXCLUSIONS跳过源代码中的某些文档。例如,当处理webkitgtk软件包时,以下内容将从本地WebKit源代码中排除: WEBKITGTK_OVERRIDE_SRCDIR = /home/bob/WebKit WEBKITGTK_OVERRIDE_SRCDIR_RSYNC_EXCLUSIONS = \ --exclude JSTests --exclude ManualTests --exclude PerformanceTests \ --exclude WebDriverTests --exclude WebKitBuild --exclude WebKitLibraries \ --exclude WebKit.xcworkspace --exclude Websites --exclude Examples 默认情况下,Buildroot会跳过VCS信息(例如.git或.svn)的同步。一些软件包在编译过程中会使用VCS信息,例如精确确认提交信息。要取消Buildroot的内置过滤规则,需要重新添加以下目录: LINUX_OVERRIDE_SRCDIR_RSYNC_EXCLUSIONS = --include .git
最近买了一块便宜的Linux开发板,是基于全志H3芯片的,想从头到尾跑一下开发流程; Uboot开发 环境搭建 安装好make、arm-linux-gnueabihf-等工具。 Uboot编译 源码下载:https://ftp.denx.de/pub/u-boot/ wget https://ftp.denx.de/pub/u-boot/u-boot-2020.04.tar.bz2 选择u-boot-2020.04.tar.bz2即可; 使用以下命令进行解压操作: tar -xvf u-boot-2020.04.tar.bz2 然后进行编译选项配置: cd u-boot-2020.04/ make -j4 ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- orangepi_lite_defconfig 编译: make -j4 ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- V=1 Uboot烧录 准备一个micro SD卡(大于8GB); 通过读卡器插入电脑; 安装并打开gparted: sudo apt install gparted sudo gparted 按照以下方式修改分区配置: 可能会出现/sdb大小不对的问题,可以先取下读卡器,然后使用sudo rm -rf /dev/sdb即可,然后再次进行分区即可; 使用以下命令进行烧录即可: sudo dd if=u-boot-sunxi-with-spl.bin of=/dev/sdb bs=1024 seek=8 上电测试 将SD卡插入开发板,给开发板上电,打开调试接口接口看到以下输出: Linux内核开发 源码下载 git clone --depth 1 --branch orange-pi-5.4 https://ghproxy.com/https://github.com/orangepi-xunlong/linux-orangepi.git cd linux-orangepi/ 编译 make sunxi_defconfig ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- make -j8 zImage dtbs ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- 生成的设备树和镜像路径: ...
很有一意思的一段趣闻; 参考:https://www.zhihu.com/question/582916722/answer/2951998203 During his own Google interview, Jeff Dean was asked the implications if P=NP were true. He said, “P = 0 or N = 1.” Then, before the interviewer had even finished laughing, Jeff examined Google’s public certificate and wrote the private key on the whiteboard. 当他被Google面试时,Jeff Dean被问及如果P=NP意味着什么。他说,“P=0 或者 N=1”。然后,在所有的面试官还没笑完之前,Jeff瞄了一眼Google的公共证书然后在白板上写上了对应的私钥。 Compilers don’t warn Jeff Dean. Jeff Dean warns compilers. 编译器从来不给Jeff编译警告,而是Jeff警告编译器。 The rate at which Jeff Dean produces code jumped by a factor of 40 in late 2000 when he upgraded his keyboard to USB 2.0. ...
最近在用LED组成的数码管,由于位号硬件上有所改动,因而需要进行码值位之间的交换; 以下是一段C语言函数,实现将一个八位的二进制数的任意两位交换: #include /** * @brief 交换一个八位的二进制数的任意两位 * @param x 一个八位的二进制数 * @param i 要交换的两个位置 * @param j 要交换的两个位置 * @return 交换后的结果 */ unsigned char swap_bits(unsigned char x, int i, int j) { // 获取第i位和第j位的值 unsigned char bit_i = (x >> i) & 1; unsigned char bit_j = (x >> j) & 1; // 如果第i位和第j位的值不同,那么交换它们 if (bit_i ^ bit_j) { x ^= (1
这个是小一的第六个正式版本了,这次是用ESP32作为主控的; 硬件 原理图 PCB 在线BOM 在线BOM 实物图
这个是针对嘉立创打样的; 单击菜单栏【文档】 » 【绘制】,格式选择【Gerber】,各项设置如下截图所示。 配置以下选项: 然后点击绘制即可: 点击生成钻孔文件: 配置钻孔选项: 然后生成钻孔文件和映射文件即可: 将生成的文件打包就可以进行打样了;