nuttx实战项目2:蓝牙有线通信板之一,nsh串口调试

NuttX STM32F205 调试笔记

经过各种调试,整理如下:

  1. 程序最开始跑飞

    • 出现 hard fault 异常。
    • 怀疑是 Bootloader 干扰,通过在 .config 中关闭 Bootloader 才能正确进入执行顺序。
  2. UART1 宏定义问题

    • 最开始 board 中 UART1 宏设置不正确。
    • 通过删除不必要的设置,并增加调试配置,在 GDB 中观察到可以输出,但程序一直等待接收。
    • 强行退出后,NSH 线程挂掉。
  3. 串口波特率问题

    • 通过示波器测得串口最小单位为 18.4 μs。
    • 将串口设置成 56000 波特后可以正常通信。
    • 怀疑晶振频率未正确配置,最终修改如下:
diff 复制代码
kelland@HP-Desktop-PC:~/nuttx_new_stm32f205/nuttx$ git diff .
diff --git a/boards/arm/stm32/photon/include/board.h b/boards/arm/stm32/photon/include/board.h
index 3adecc20f6..3401890eca 100644
--- a/boards/arm/stm32/photon/include/board.h
+++ b/boards/arm/stm32/photon/include/board.h
@@ -66,11 +66,11 @@
 
 /* HSI - 16 MHz RC factory-trimmed
  * LSI - 32 KHz RC
- * HSE - On-board crystal frequency is 26MHz
+ * HSE - On-board crystal frequency is 12MHz
  * LSE - 32.768 kHz
  */
 
-#define STM32_BOARD_XTAL        26000000ul
+#define STM32_BOARD_XTAL        12000000ul
 #define STM32_HSI_FREQUENCY     16000000ul
 #define STM32_LSI_FREQUENCY     32000
@@ -90,7 +90,7 @@
  *         = 48,000,000
  */
 
-#define STM32_PLLCFG_PLLM       RCC_PLLCFG_PLLM(26)
+#define STM32_PLLCFG_PLLM       RCC_PLLCFG_PLLM(12)
 #define STM32_PLLCFG_PLLN       RCC_PLLCFG_PLLN(240)
 #define STM32_PLLCFG_PLLP       RCC_PLLCFG_PLLP_2
 #define STM32_PLLCFG_PLLQ       RCC_PLLCFG_PLLQ(5)
@@ -228,6 +228,13 @@
 #  define GPIO_USART1_TX GPIO_USART1_TX_1
 #endif
 
+/* UART2 */
+
+#ifdef CONFIG_STM32_USART2
+#  define GPIO_USART2_RX GPIO_USART2_RX_1 /* PA3 */
+#  define GPIO_USART2_TX GPIO_USART2_TX_1 /* PA2 */
+#endif
+
 /* SPI1 */
 
 #define GPIO_SPI1_MISO   GPIO_SPI1_MISO_1  /* PA6 */
diff --git a/boards/arm/stm32/photon/scripts/photon_jtag.ld b/boards/arm/stm32/photon/scripts/photon_jtag.ld
index 67d7346c05..f1d93d5d3a 100644
--- a/boards/arm/stm32/photon/scripts/photon_jtag.ld
+++ b/boards/arm/stm32/photon/scripts/photon_jtag.ld
@@ -32,7 +32,7 @@
 MEMORY
 {
   flash (rx) : ORIGIN = 0x08000000, LENGTH = 1024K
-  sram (rwx) : ORIGIN = 0x20000000, LENGTH = 112K
+  sram (rwx) : ORIGIN = 0x20000000, LENGTH = 128K
 }
 
 OUTPUT_ARCH(arm)
  1. .config 修改

    • 关闭 DFU Bootloader
    • 启用 USART2 串口和控制台

    kelland@HP-Desktop-PC:~/nuttx_new_stm32f205/nuttx$ diff boards/arm/stm32/photon/configs/nsh/defconfig defconfig
    31d30
    < CONFIG_PHOTON_DFU_BOOTLOADER=y
    45a45

    CONFIG_STM32_USART2=y
    47c47
    < CONFIG_USART1_SERIAL_CONSOLE=y


    CONFIG_USART2_SERIAL_CONSOLE=y

相关推荐
深耕AI13 分钟前
【时钟周期 vs 指令】为什么51单片机需要12个时钟周期?
单片机·嵌入式硬件·51单片机
Arciab1 小时前
51单片机_LCD1602液晶显示
网络·嵌入式硬件·51单片机
清风6666664 小时前
基于单片机的多功能智能婴儿车设计
单片机·嵌入式硬件·毕业设计·课程设计·期末大作业
码咔吧咔4 小时前
STM32芯片简介,以及STM32的存储器映射是什么?
stm32·单片机·嵌入式硬件
别掩6 小时前
MOS防倒灌电路设计
单片机·嵌入式硬件
夜流冰6 小时前
EE - 电容电感电路中电流的变化
单片机·嵌入式硬件
橙露7 小时前
STM32中断配置全解析:从寄存器到HAL库的实战应用
stm32·单片机·嵌入式硬件
c-u-r-ry307 小时前
ZYNQ7 Processing System各个配置界面介绍
嵌入式硬件
idcardwang8 小时前
esp32s3-pwm介绍与stm32的不同原理
单片机·嵌入式硬件
码咔吧咔8 小时前
Flash 是什么?SRAM 是什么?它们的作用、特点、区别、在 STM32 中如何使用?
stm32·嵌入式硬件