打印
[STM32C0]

基于STM32C031C6点灯和移植xprintf的经验分享

[复制链接]
1253|20
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
elephant00|  楼主 | 2023-4-4 09:39 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
一、开发板资源



板载了一个stlink-v2-1,U盘模式支持.bin文件拖放和虚拟串口。

STM32C031C6外设资源



48mhz主频,32K+12K的内存资源够用了。12bit ADC最大 2.5 MSps,最多有19个外部通道和2个内部通道。




二、cubemx配置
LED灯 GPIO配置

led由PA5驱动nmos来控制。高为导通,低为截止。






串口初始化配置
stlink的串口和stm32c031的PA2,PA3相连。用的uart2外设.





时钟配置
这个简单粗暴直接上48mhz。



生成项目配置



移植xprintf

xprintf 源文件可以到这里下载 xprintf官网




使用特权

评论回复
沙发
elephant00|  楼主 | 2023-4-4 09:39 | 只看该作者
main 函数
  • int main(void)
  • {
  •   /* USER CODE BEGIN 1 */
  •   /* USER CODE END 1 */
  •   /* MCU Configuration--------------------------------------------------------*/
  •   /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  •   HAL_Init();
  •   /* USER CODE BEGIN Init */
  •   /* USER CODE END Init */
  •   /* Configure the system clock */
  •   SystemClock_Config();
  •   /* USER CODE BEGIN SysInit */
  •   /* USER CODE END SysInit */
  •   /* Initialize all configured peripherals */
  •   MX_GPIO_Init();
  •   MX_ADC1_Init();
  •   MX_I2C1_Init();
  •   MX_USART2_UART_Init();
  •   /* USER CODE BEGIN 2 */
  •         xdev_out(uart2_putc);//xprintf
  •   /* USER CODE END 2 */
  •   /* Infinite loop */
  •   /* USER CODE BEGIN WHILE */
  •   while (1)
  •   {
  •     /* USER CODE END WHILE */
  •     /* USER CODE BEGIN 3 */
  •                 HAL_GPIO_TogglePin(LED1_GPIO_Port, LED1_Pin);
  •                 xprintf("hello stm32c0\n\r");
  •                 HAL_Delay(1000);
  •   }
  •   /* USER CODE END 3 */
  • }


复制代码


实验效果
串口打印OK



LED 1s闪烁


使用特权

评论回复
板凳
Stahan| | 2023-4-4 23:43 | 只看该作者
c0系列定位是什么?

使用特权

评论回复
地板
kyzhd| | 2023-4-5 22:12 | 只看该作者
Stahan 发表于 2023-4-4 23:43
c0系列定位是什么?

官方定义是替代8位单片机的高性价比单片机

使用特权

评论回复
5
MessageRing| | 2023-4-5 22:27 | 只看该作者
替代stm8的吧

使用特权

评论回复
6
plsbackup| | 2024-1-8 15:24 | 只看该作者
点灯实验是STM32最基础的实验之一,主要用于验证MCU的基本功能和外围设备的正常工作。

使用特权

评论回复
7
macpherson| | 2024-1-9 16:36 | 只看该作者
使用STM32CubeIDE, 在项目设置中正确配置了编译器和编译选项

使用特权

评论回复
8
houjiakai| | 2024-1-9 20:26 | 只看该作者
xprintf是一种用于嵌入式系统的轻量级可扩展printf函数库,它可以替代标准库中的printf来减少ROM和RAM占用。

使用特权

评论回复
9
nomomy| | 2024-1-9 21:24 | 只看该作者
#include "xprintf.h"
#include "usart.h" // 自定义的USART驱动头文件

// 自定义putchar函数
int putchar(int ch) {
    HAL_UART_Transmit(&huart1, (uint8_t*)&ch, 1, HAL_MAX_DELAY);
    return ch;
}

// 初始化后注册putchar函数
void init_printf(void) {
    xdev_out(putchar);
}

int main(void) {
    // 初始化GPIO,USART等...
    init_printf(); // 注册putchar函数

    printf("Hello, World!\r\n"); // 使用xprintf提供的printf功能

    while(1) {
        // 主循环
    }
}

使用特权

评论回复
10
jkl21| | 2024-1-10 07:26 | 只看该作者
STM32C031C6是一款基于ARM Cortex-M0核心的微控制器,具有高性价比和低功耗特性,适合应用于需要小型、低功耗和高集成度的场景。

使用特权

评论回复
11
juliestephen| | 2024-1-10 12:45 | 只看该作者
需要一个LED灯和一个适当的限流电阻。将LED的正极连接到STM32的某个GPIO(例如GPIOA的Pin 1),将LED的负极连接到地线。

使用特权

评论回复
12
bartonalfred| | 2024-1-10 17:14 | 只看该作者
xprintf函数是一个用于STM32的printf函数替换库,具有较小的代码体积和较快的执行速度。

使用特权

评论回复
13
51xlf| | 2024-1-10 18:55 | 只看该作者
在CUBEMX中,我们需要配置USART(串口通信

使用特权

评论回复
14
qiufengsd| | 2024-1-10 19:56 | 只看该作者
替换printf函数。在工程中,将原有的printf函数替换为xprintf函数。注意:需要将xprintf函数的第二个参数(输出流)设置为NULL,例如:xprintf(NULL, "Hello, World!\n");

使用特权

评论回复
15
alvpeg| | 2024-1-10 23:02 | 只看该作者
在系统启动时初始化一个串口(如USART1),并配置好波特率、数据位、停止位和校验位。
将该串口作为xprintf的目标输出设备。

使用特权

评论回复
16
pl202| | 2024-1-11 12:26 | 只看该作者
xprintf是一个C语言库函数,它可以实现类似于标准printf函数的效果,但是不依赖于C标准库,因此可以用于嵌入式系统中

使用特权

评论回复
17
bartonalfred| | 2024-1-11 21:43 | 只看该作者
xprintf是一个常用的调试打印函数,可以在没有操作系统的情况下使用。

使用特权

评论回复
18
maqianqu| | 2024-1-11 22:01 | 只看该作者
https://github.com/andysworkshop/xprintf

使用特权

评论回复
19
fengm| | 2024-1-13 12:11 | 只看该作者
// LED亮起
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_SET);

// LED熄灭
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_RESET);

使用特权

评论回复
20
pentruman| | 2024-1-13 15:27 | 只看该作者
将xprintf相关的.c和.h文件添加到STM32C031C6的Keil或其他IDE项目中。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

947

主题

2797

帖子

5

粉丝