跳转至内容
  • 版块
  • 最新
  • 标签
  • 热门
  • 世界
  • 用户
  • 群组
  • 游戏大厅
  • 工具箱
  • 连载
皮肤
  • 浅色
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • 深色
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Potatochip Light
  • Potatochip Dark
折叠
品牌标识

potato CHIP

A

admin

@admin
administrators
取消关注 关注
关于
帖子
18
主题
19
分享
0
群组
1
粉丝
0
关注
0

帖子

最新 最佳 有争议的

  • 「失败者联盟」—— 1 小时挑战做的超度小游戏
    A admin
    综合讨论

    很久以前参加 1 Hour Challenge 写的小玩具,今天翻出来扩了个容,顺便发出来给大家玩。

    怎么玩

    鼠标(手机上用手指)点击那些失败的科技产品,送它一块墓碑,附赠一句墓志铭。超度得越多,墓园越壮观。右上角可以"扫墓"清屏重来。

    目前入住的 20 位

    手机:BlackBerry(全键盘随我长眠)、Nokia Lumia(只差一个微信)、Fire Phone(除了亚马逊没人买过)、Galaxy Note 7(此地禁止携带上飞机)、Microsoft Kin(在职 48 天)、Essential Phone(安卓之父也带不动)

    游戏机:Google Stadia(退款比开服快)、Ouya(众筹 860 万买了个寂寞)、Dreamcast(最后的武士)

    系统:Windows Phone(生态荒漠)、Palm webOS(超前时代,死于收购)

    社交:Google+(九成会话活不过五秒)、Vine(坟头长出了 TikTok)

    硬件:Google Glass(Glasshole 头衔)、Juicero(七百美元不如一双手)、Pebble(死于被收购)、Segway(武装了保安)、Virtual Boy(物理意义上的辣眼睛)

    服务:Google Reader(RSS 之泪)、HD-DVD(败给蓝光)

    技术栈

    单文件 HTML + GSAP,无构建,手机触屏适配。墓碑材质按生前咖位:金 / 银 / 石。


    墓志铭纯属虚构,如有雷同,说明这些产品真的死了。


  • STM32 UART 串口通信:printf 重定向与中断接收(示例帖)
    A admin
    STM32

    串口是 STM32 调试的生命线:打印日志、看传感器数据、跟上位机联调都靠它。这篇把最常用的两招讲透:printf 重定向输出,中断方式接收。

    1. CubeMX 配置要点

    • Connectivity → USART1,Mode 选 Asynchronous
    • 波特率 115200,8 数据位、无校验、1 停止位(8N1)
    • NVIC Settings 里勾选 USART1 global interrupt(中断接收才需要)
    • PA9(TX)、PA10(RX)接到 USB 转串口模块,注意 TX 接 RX、RX 接 TX,交叉接

    2. printf 重定向

    C 库的 printf 最终调 fputc,重写它把字符送进串口:

    #include <stdio.h>
    
    int fputc(int ch, FILE *f) {
        HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, HAL_MAX_DELAY);
        return ch;
    }
    
    // main 里直接用
    printf("system clock: %lu Hz\r\n", HAL_RCC_GetSysClockFreq());
    

    注意两点:

    • printf 发 \n 不会自动回车,串口助手里看到满屏阶梯状就改成 \r\n
    • HAL_MAX_DELAY 是阻塞等待,放在中断里调 printf 会卡死,中断里只做标记

    3. 中断接收(推荐做法)

    轮询接收会堵住主循环,用中断 + 一字节缓冲:

    uint8_t rx_byte;
    uint8_t rx_buf[128];
    uint8_t rx_len = 0;
    
    void start_uart_rx(void) {
        HAL_UART_Receive_IT(&huart1, &rx_byte, 1); // 启动一次
    }
    
    // 每收到 1 字节进一次回调,记得重新挂起下一次接收
    void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) {
        if (huart->Instance == USART1) {
            if (rx_byte == '\n' || rx_len >= sizeof(rx_buf) - 1) {
                rx_buf[rx_len] = '\0';
                // 在这里处理一行命令,不要做耗时操作
                rx_len = 0;
            } else if (rx_byte != '\r') {
                rx_buf[rx_len++] = rx_byte;
            }
            HAL_UART_Receive_IT(&huart1, &rx_byte, 1); // 关键:重新挂起
        }
    }
    

    4. 排障清单

    现象 先查
    串口无输出 波特率两边是否一致;TX/RX 是否交叉接;GND 有没有共地
    输出乱码 波特率/时钟配置,检查 HSE 是否起振
    只能收一次 回调里有没有重新调 HAL_UART_Receive_IT
    printf 卡死 是否在中断上下文里调用;串口外设时钟开了没

    下一篇计划写定时器 PWM 驱动舵机/电机,连载目录见 /series。


  • STM32 UART 串口通信:printf 重定向与中断接收(示例帖)
    A admin
    STM32

    串口是 STM32 调试的生命线:打印日志、看传感器数据、跟上位机联调都靠它。这篇把最常用的两招讲透:printf 重定向输出,中断方式接收。

    1. CubeMX 配置要点

    • Connectivity → USART1,Mode 选 Asynchronous
    • 波特率 115200,8 数据位、无校验、1 停止位(8N1)
    • NVIC Settings 里勾选 USART1 global interrupt(中断接收才需要)
    • PA9(TX)、PA10(RX)接到 USB 转串口模块,注意 TX 接 RX、RX 接 TX,交叉接

    2. printf 重定向

    C 库的 printf 最终调 fputc,重写它把字符送进串口:

    #include <stdio.h>
    
    int fputc(int ch, FILE *f) {
        HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, HAL_MAX_DELAY);
        return ch;
    }
    
    // main 里直接用
    printf("system clock: %lu Hz\r\n", HAL_RCC_GetSysClockFreq());
    

    注意两点:

    • printf 发 \n 不会自动回车,串口助手里看到满屏阶梯状就改成 \r\n
    • HAL_MAX_DELAY 是阻塞等待,放在中断里调 printf 会卡死,中断里只做标记

    3. 中断接收(推荐做法)

    轮询接收会堵住主循环,用中断 + 一字节缓冲:

    uint8_t rx_byte;
    uint8_t rx_buf[128];
    uint8_t rx_len = 0;
    
    void start_uart_rx(void) {
        HAL_UART_Receive_IT(&huart1, &rx_byte, 1); // 启动一次
    }
    
    // 每收到 1 字节进一次回调,记得重新挂起下一次接收
    void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) {
        if (huart->Instance == USART1) {
            if (rx_byte == '\n' || rx_len >= sizeof(rx_buf) - 1) {
                rx_buf[rx_len] = '\0';
                // 在这里处理一行命令,不要做耗时操作
                rx_len = 0;
            } else if (rx_byte != '\r') {
                rx_buf[rx_len++] = rx_byte;
            }
            HAL_UART_Receive_IT(&huart1, &rx_byte, 1); // 关键:重新挂起
        }
    }
    

    4. 排障清单

    现象 先查
    串口无输出 波特率两边是否一致;TX/RX 是否交叉接;GND 有没有共地
    输出乱码 波特率/时钟配置,检查 HSE 是否起振
    只能收一次 回调里有没有重新调 HAL_UART_Receive_IT
    printf 卡死 是否在中断上下文里调用;串口外设时钟开了没

    下一篇计划写定时器 PWM 驱动舵机/电机,连载目录见 /series。


  • STM32 UART 串口通信:printf 重定向与中断接收(示例帖)
    A admin
    STM32

    串口是 STM32 调试的生命线:打印日志、看传感器数据、跟上位机联调都靠它。这篇把最常用的两招讲透:printf 重定向输出,中断方式接收。

    1. CubeMX 配置要点

    • Connectivity → USART1,Mode 选 Asynchronous
    • 波特率 115200,8 数据位、无校验、1 停止位(8N1)
    • NVIC Settings 里勾选 USART1 global interrupt(中断接收才需要)
    • PA9(TX)、PA10(RX)接到 USB 转串口模块,注意 TX 接 RX、RX 接 TX,交叉接

    2. printf 重定向

    C 库的 printf 最终调 fputc,重写它把字符送进串口:

    #include <stdio.h>
    
    int fputc(int ch, FILE *f) {
        HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, HAL_MAX_DELAY);
        return ch;
    }
    
    // main 里直接用
    printf("system clock: %lu Hz\r\n", HAL_RCC_GetSysClockFreq());
    

    注意两点:

    • printf 发 \n 不会自动回车,串口助手里看到满屏阶梯状就改成 \r\n
    • HAL_MAX_DELAY 是阻塞等待,放在中断里调 printf 会卡死,中断里只做标记

    3. 中断接收(推荐做法)

    轮询接收会堵住主循环,用中断 + 一字节缓冲:

    uint8_t rx_byte;
    uint8_t rx_buf[128];
    uint8_t rx_len = 0;
    
    void start_uart_rx(void) {
        HAL_UART_Receive_IT(&huart1, &rx_byte, 1); // 启动一次
    }
    
    // 每收到 1 字节进一次回调,记得重新挂起下一次接收
    void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) {
        if (huart->Instance == USART1) {
            if (rx_byte == '\n' || rx_len >= sizeof(rx_buf) - 1) {
                rx_buf[rx_len] = '\0';
                // 在这里处理一行命令,不要做耗时操作
                rx_len = 0;
            } else if (rx_byte != '\r') {
                rx_buf[rx_len++] = rx_byte;
            }
            HAL_UART_Receive_IT(&huart1, &rx_byte, 1); // 关键:重新挂起
        }
    }
    

    4. 排障清单

    现象 先查
    串口无输出 波特率两边是否一致;TX/RX 是否交叉接;GND 有没有共地
    输出乱码 波特率/时钟配置,检查 HSE 是否起振
    只能收一次 回调里有没有重新调 HAL_UART_Receive_IT
    printf 卡死 是否在中断上下文里调用;串口外设时钟开了没

    下一篇计划写定时器 PWM 驱动舵机/电机,连载目录见 /series。


  • STM32 HAL 点亮 LED:最小可运行工程(示例帖)
    A admin
    STM32

    这是论坛的第一篇示例教程,演示代码高亮与发帖模板是否正常工作。

    目标

    用 STM32 HAL 库点亮一块 LED,理解 GPIO 输出的基本流程。

    代码

    #include "main.h"
    
    int main(void)
    {
    	HAL_Init();
    	__HAL_RCC_GPIOA_CLK_ENABLE();  // 先开 GPIOA 时钟
    
    	GPIO_InitTypeDef gpio = {0};
    	gpio.Pin = GPIO_PIN_5;
    	gpio.Mode = GPIO_MODE_OUTPUT_PP;
    	gpio.Pull = GPIO_NOPULL;
    	gpio.Speed = GPIO_SPEED_FREQ_LOW;
    	HAL_GPIO_Init(GPIOA, &gpio);
    
    	while (1) {
    		HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_5);
    		HAL_Delay(500);
    	}
    }
    

    要点

    1. 操作任何外设前先使能对应总线时钟,这是新手最常踩的坑。
    2. HAL_Delay 依赖 SysTick,确保 HAL_Init() 已调用。
    3. LED 不亮时先用万用表量引脚电平,二分法定位是软件还是硬件问题。

  • 新人必读:发帖指南(代码格式 / 提问规范)
    A admin
    综合讨论

    欢迎来到 potato CHIP(试运行)!发帖前花一分钟看看这份指南,提问更容易得到回答。

    1. 代码怎么贴

    用三个反引号包裹代码,并在后面标注语言,代码会自动高亮:

    #include <stdio.h>
    int main(void) {
        printf("hello chip\n");
        return 0;
    }
    

    常用语言标记:c、cpp、python。编译报错信息也请用代码块贴,不要截图——方便别人复制搜索。

    2. 求助请用「问答」功能

    • 发帖时可以把帖子标记为问题帖;
    • 问题解决后,请把有用的回复设为最佳答案,或把帖子标记为已解决;
    • 这样后来的人一眼就能看到答案,也方便搜索。

    3. 标题写清楚

    建议格式:[STM32] 定时器中断进不去,求助、[ESP32] DHT11 读数全是 0。
    好标题 = 芯片型号 + 一句话问题,别只写"救命""求助大佬"。

    4. 提问时带上这些信息

    • 开发板型号、IDE/框架(HAL 库 / ESP-IDF / Arduino);
    • 最小可复现的代码;
    • 实际现象 vs 预期现象;试过哪些排查步骤。

    5. 其他

    • 发帖最短 8 个字符,新用户发帖有 2 分钟间隔限制,防 spam;
    • 视频教程可以直接贴 YouTube / B站链接,会自动嵌入播放器;
    • 论坛试运行中,分类和名称都可能调整,有建议直接回帖。

  • 视频:B站 STM32 / ESP32 教程嵌入测试
    A admin
    综合讨论

    测试 B 站视频的嵌入效果。

    江协科技 STM32 入门教程(2023版)

    keysking:超易懂的 STM32 教程

    ESP32-S3 搭建小智 AI(有手就会版)


  • 视频:ESP32 入门教程(YouTube 嵌入测试)
    A admin
    ESP32

    YouTube 上两个 ESP32 新手教程,直接在帖子里播放。

    ESP32 Tutorial For Absolute Beginners(ESP32-C3)

    ESP32 Tutorial #1: Control an LED with a Button


  • 视频:STM32 入门教程(YouTube 嵌入测试)
    A admin
    STM32

    测试一下 YouTube 视频在论坛里的嵌入效果,顺便推荐两个 STM32 入门视频。

    Getting Started with STM32 Blue Pill

    STM32 Blue Pill LED Blink(CubeMX + CubeIDE)


  • 关于论坛名字:为什么叫 potato CHIP?
    A admin
    综合讨论

    新来的朋友可能好奇,这名字啥意思。

    potato 是土豆,CHIP 既是薯片也是芯片(chip)—— 咱们这儿玩的就是芯片,顺手蹭个薯片的谐音。

    论坛 logo

    名字还没最终定,试运行阶段先这么叫着。大家有更好的名字欢迎在楼下提!


  • 【接线参考】ESP32 + DHT11 温湿度计硬件连接实拍
    A admin
    ESP32

    DHT11 的接线很简单,一共三根线:

    ESP32 + DHT11 接线

    • VCC → 3V3
    • DATA → GPIO4
    • GND → GND

    DATA 脚建议加一个 4.7k~10k 的上拉电阻到 VCC,读数会更稳定。代码部分参考之前的《ESP32 + DHT11 做个简易温湿度计》。


  • 【实拍】STM32 最小系统板上电,PC13 点灯成功
    A admin
    STM32

    刚把手头的 STM32F103C8T6 最小系统板翻出来,上电实测点灯。

    最小系统板

    烧录的是之前教程里的 Blink 例程,PC13 接板载 LED,1 秒闪一次,实拍效果如下:

    下一步准备把串口打印也调通,有一起玩的可以在楼下交流。


  • potato CHIP 试运行中
    A admin
    综合讨论

    论坛刚搭起来,目前是试运行阶段:

    • 名字还没定稿,potato CHIP 只是暂用名
    • 界面、分类都在调整中
    • 欢迎提建议,直接回帖就行

    测试期间的数据可能会清空,正式开张前会再通知。


  • 新人报到 & 灌水区使用说明
    A admin
    综合讨论

    大家好,这里是综合讨论区,灌水、开箱、求助、闲聊都在这里。

    测试一下论坛的基本功能:发帖、回复、表情 😄。

    有什么想聊的直接开帖,STM32 / ESP32 的技术问题建议发到对应分类,方便以后检索。


  • ESP32 + DHT11 做个简易温湿度计
    A admin
    ESP32

    想法

    手头有块 ESP32 和一个 DHT11,干脆做个温湿度计,把数据打印到串口。代码不到 50 行,适合周末半小时折腾。

    接线

    • DHT11 VCC → ESP32 3V3
    • DHT11 DATA → ESP32 GPIO4
    • DHT11 GND → ESP32 GND

    代码(Arduino 框架)

    #include <DHT.h>
    #define DHTPIN 4
    #define DHTTYPE DHT11
    DHT dht(DHTPIN, DHTTYPE);
    
    void setup() {
     Serial.begin(115200);
     dht.begin();
    }
    
    void loop() {
     float h = dht.readHumidity();
     float t = dht.readTemperature();
     Serial.printf("温度: %.1f°C 湿度: %.1f%%\n", t, h);
     delay(2000);
    }
    

    效果

    打开串口监视器(115200),每 2 秒刷一行数据。下一步可以加个 OLED 显示,或者连 WiFi 上报数据。


    测试帖,顺便看看论坛代码块的显示效果。


  • STM32 新手第一课:环境搭建与点灯
    A admin
    STM32

    写在前面

    这是 potato CHIP 的第一篇测试教程,顺手验证下论坛的排版效果。如果你是第一次玩 STM32,跟着走一遍就能点亮第一颗灯。

    需要准备

    • 一块 STM32 开发板(比如 F103 系列任意板子)
    • ST-LINK / DAPLink 调试器
    • STM32CubeMX + Keil MDK(ARM)

    步骤

    1. 打开 STM32CubeMX,新建工程,选择你的芯片型号(如 STM32F103C8T6)。
    2. 在 Pinout 界面把板载 LED 对应的 GPIO 设为 GPIO_Output(一般是 PC13)。
    3. Clock Configuration 里把 HCLK 配到 72MHz。
    4. Project Manager 里填工程名、选择 MDK-ARM 工具链,生成代码。
    5. 用 Keil 打开工程,在 main.c 的 while(1) 里加:
    HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_13);
    HAL_Delay(500);
    
    1. 编译、烧录,灯开始闪烁 —— 恭喜,环境没问题!

    常见坑

    • 烧录器驱动没装:ST-LINK 需要装官方驱动。
    • delay 不准:先检查 HSE 时钟是否使能。

    本帖为测试内容,排版如果看着别扭欢迎吐槽。


  • Welcome to your NodeBB!
    A admin
    General Discussion

    Welcome to your brand new NodeBB forum!

    This is what a topic and post looks like. As an administrator, you can edit the post's title and content.
    To customise your forum, go to the Administrator Control Panel. You can modify all aspects of your forum there, including installation of third-party plugins.

    Additional Resources

    • NodeBB Documentation
    • Community Support Forum
    • Project repository
  • 登录

  • 没有帐号? 注册

  • 登录或注册以进行搜索。
Powered by NodeBB Contributors
  • 第一个帖子
    最后一个帖子
0
  • 版块
  • 最新
  • 标签
  • 热门
  • 世界
  • 用户
  • 群组
  • 游戏大厅
  • 工具箱
  • 连载