Ronan Blog

罗华东的博客 | 向前每多走一步,热爱和勇气就会多一分。

「platformIO」printf 重映像、串口打印数据

2024-10-22 1 min read Docs Ronan

keil 环境中使用 printf 通过串口打印数据:

  • 在 main.c 引入stdio.h

  • 重写fputc函数

    // keil arm环境,如果你要用printf函数,就必须重写fputc函数,并且在魔术棒里面勾选使用Micro LIB
    int fputc(int ch, FILE *f)
    {
    	USART_SendData(USART1, ch);
    	while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET);//循环的判断串口是否发送完数据
    
    	return ch;
    }
    

    完成以上配置即可在 main 函数中使用 printf 函数通过串口打印数据。

arm-***-gcc 环境使用 printf 通过串口打印数据:

  • 不需要引入stdio.h头文件

  • 直接在 main.c 中重写_write方法即可

    // gcc 编译环境重写该方法
    //这是一种写法
    int _write( int fd, char *pBuffer, int size) {
        for (int i = 0; i < size; i++) {
            while ((USART1->SR&0x40) == 0);		// 等待串口发送完毕
            USART1->DR = (uint8_t) pBuffer[i];
        }
        return size;
    }
    
    //还有另一种写法,根据情况按需选择
    int _write( int fd, char *pBuffer, int size) {
        for (int i = 0; i < size; i++)
    	{
            while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET);		// 等待串口发送完毕
            USART1->DR = (uint8_t) pBuffer[i];
        }
        return size;
    }
    

「platformIO」解决 stm32 标准外设库时钟不准的问题

2024-10-22 1 min read Docs Ronan

以下以stm32f407系列举例

1.遭遇问题:

在使用 platformIO 搭建标准外设库进行实际开发时遇到了外部时钟不准的问题。

2.原因分析:

这是因为 HSE 的配置有问题,platformIO 自带以及从 ST 官网下载的标准库中的 system_stm32f4xx.cPLL_Mstm32f4xx.h中的 HSE_VALUE默认值与实际开发版的外部晶振频率不一致

3.解决方法

假设当前stm32f407的板子上外部晶振是8MHz(根据自身情况不同)

1.将 platformIO 的安装目录中的 /Users//.platformio/packages/
framework-cmsis-stm32f4/Source/Templates/system_stm32f4xx.c
文件删除。

2.将解压得到的标准库的 …/STM32F4xx_DSP_StdPeriph_Lib_V1.9.0/Project/
STM32F4xx_StdPeriph_Templates/system_stm32f4xx.c
文件复制到
/Users//.platformio/packages/framework-cmsis-stm32f4/
Source/Templates/
目录下。

3.打开 /Users//.platformio/packages/framework-cmsis-stm32f4/
Source/Templates/system_stm32f4xx.c
,在其中搜索到PLL_M

#if defined(STM32F40_41xxx) || defined(STM32F427_437xx) || defined(STM32F429_439xx) || defined(STM32F401xx) || defined(STM32F469_479xx)
 /* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N */
 #define PLL_M      25

PLL_M 后的25修改为 8

Continue reading

「platformIO」基于 stm32 HAL库 的工程模板

2024-10-22 2 min read Docs Ronan

1.建立 Makefile 工程

通过 STM32CubeMX 建立适于自己开发版的 Makefile 工程(步骤不赘述,百度一下,你就知道),并且记住「工程名」和「工程存放路径」。

2.新建 platformIO 工程

新建 platformIO 工程时的「Framework」一定要选择「STM32Cube」,新建工程的「工程名」和「工程存放路径」要与之前建立的 Makefile 工程一致

工程建立完成后,你应该会得到如下项目结构:

├── Core
│   ├── Inc
│   │   ├── gpio.h
│   │   ├── main.h
│   │   ├── ...
│   └── Src
│       ├── gpio.c
│       ├── main.c
│       ├── ...
├── Drivers
│   ├── CMSIS
│   │   ├── Device
│   │   │   └── ST
│   │   │       └── STM32F1xx
│   │   │           ├── Include
│   │   │           │   ├── stm32f103xb.h
│   │   │           │   ├── stm32f1xx.h
│   │   │           │   └── system_stm32f1xx.h
│   │   │           ├── LICENSE.txt
│   │   │           └── Source
│   │   │               └── Templates
│   │   ├── Include
│   │   │   ├── cmsis_armcc.h
│   │   │   ├── cmsis_armclang.h
│   │   │   ├── cmsis_compiler.h
│   │   │   ├── cmsis_gcc.h
│   │   │   ├── ...
│   │   └── LICENSE.txt
│   └── STM32F1xx_HAL_Driver
│       ├── Inc
│       │   ├── Legacy
│       │   │   └── stm32_hal_legacy.h
│       │   ├── stm32f1xx_hal.h
│       │   ├── stm32f1xx_hal_cortex.h
│       │   ├── stm32f1xx_hal_def.h
│       │   ├── ...
│       ├── LICENSE.txt
│       └── Src
│           ├── stm32f1xx_hal.c
│           ├── stm32f1xx_hal_cortex.c
│           ├── stm32f1xx_hal_dma.c
│           ├── ...
├── Makefile
├── STM32F103C8Tx_FLASH.ld
├── include
│   └── README
├── lib
│   └── README
├── one.ioc
├── platformio.ini
├── src
├── startup_stm32f103xb.s
└── test
    └── README

3.配置工程

  • 修改 platformio.ini

platformIo.ini中添加:

Continue reading
Older posts Newer posts