uC-OS2 V2.93 STM32L476 移植:串口打印篇

这篇具有很好参考价值的文章主要介绍了uC-OS2 V2.93 STM32L476 移植:串口打印篇。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

  • 前几篇已经 通过 STM32CubeMX 搭建了 NUCLEO-L476RG 的 STM32L476RG 的 裸机工程,下载了 uC-OS2 V2.93 的源码,并把 uC-OS2 的源文件加入 Keil MDK5 工程,通过适配 Systick 系统定时器与 PendSV 实现任务调度,初步让 uC-OS2 运行起来

  • 本篇适配 uC-OS2 的 串口驱动,实现 类似于 printf 的打印功能,让 uC-OS2 有串口运行信息

开发环境

  • win10 64位

  • Keil uVision5,MDK V5.36

  • uC-OS2 V2.93

  • 开发板:NUCLEO-L476RG ,MCU 为 STM32L476RG

  • STM32CubeMX 6.9.1,用于生成 STM32的裸机工程

串口驱动

  • 通过 STM32CubeMX,已经配置了串口的驱动,默认串口的波特率是 115200 bps,不过没有串口输出的接口,需要自己完善一下

  • 新建 uart.c,驱动如下

#include "uart2.h"
#include <stdio.h>
#include <stdarg.h>
#include <string.h>
#include "stm32l4xx_hal.h"

static UART_HandleTypeDef huart2;

#define DBG_BUFF_MAX_LEN    256
static char rt_log_buf[DBG_BUFF_MAX_LEN] = { 0 };

void uart2_put(const char *fmt)
{
    HAL_UART_Transmit(&huart2, (uint8_t *)fmt, strlen(fmt), 0xFFFF);
}

/* debug print */
int os_printf(const char *fmt, ...)
{
    int length;
    va_list args;
    va_start(args, fmt);
    length = vsnprintf(rt_log_buf, sizeof(rt_log_buf) - 1, fmt, args);

    uart2_put(rt_log_buf);
    return length;
}

int uart2_init(uint32_t baud_rate)
{
    huart2.Instance = USART2;
    huart2.Init.BaudRate = baud_rate;
    huart2.Init.WordLength = UART_WORDLENGTH_8B;
    huart2.Init.StopBits = UART_STOPBITS_1;
    huart2.Init.Parity = UART_PARITY_NONE;
    huart2.Init.Mode = UART_MODE_TX_RX;
    huart2.Init.HwFlowCtl = UART_HWCONTROL_NONE;
    huart2.Init.OverSampling = UART_OVERSAMPLING_16;
    huart2.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;
    huart2.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;
    return HAL_UART_Init(&huart2);
}
  • 说明: 这里通过 C 标准库 vsnprintf 实现格式化打印,定义一个 全局的 buffer。

  • 新建 uart2.h 头文件

#ifndef __UART2_H__
#define __UART2_H__

#include <stdint.h>

int uart2_init(uint32_t baud_rate);
int os_printf(const char *fmt, ...);

#endif

main 函数调用

  • 首先包含 #include "uart2.h",然后 初始化串口:uart2_init(UART2_BAUD_RATE);,然后就可以使用 os_printf 格式化打印了

  • 格式化打印的意思就是可以像 printf 那样,把一个数值 打印输出 十进制、十六进制等工程,也可以 %s 输出一个字符串

  • 修改后的 main.c 如下

#include "main.h"
#include "led.h"
#include "app_cfg.h"
#include "os.h"
#include "uart2.h"

void SystemClock_Config(void);
static void MX_GPIO_Init(void);

#define UART2_BAUD_RATE             115200
#define MCU_FREQUENCY               80000000

#define TASK_LED_PRIO               5
#define TASK_LED_STACK_SIZE         128
static OS_STK task_led_stack[TASK_LED_STACK_SIZE];

static void task_led_entry(void *p_arg)
{
    int cnt = 0;

    while (1)
    {
        led_grn_ctrl(1);
        OSTimeDly(1000);
        led_grn_ctrl(0);
        OSTimeDly(1000);
        cnt++;
        os_printf("%s : cnt : %d\r\n", __func__, cnt);
    }
}

void led_task_init(void)
{
    OSTaskCreate(task_led_entry,(void *)0, &task_led_stack[TASK_LED_STACK_SIZE-1], TASK_LED_PRIO);
}

HAL_StatusTypeDef HAL_InitTick(uint32_t TickPriority)
{
    return HAL_OK;
}

/**
  * @brief  The application entry point.
  * @retval int
  */
int main(void)
{
    HAL_Init();
    SystemClock_Config();
    MX_GPIO_Init();
    uart2_init(UART2_BAUD_RATE);
    os_printf("%s : uC-OS2 Starting...\r\n", __func__);
    OSInit();
    led_task_init();
    OS_CPU_SysTickInitFreq(MCU_FREQUENCY);
    OSStart();

    return 0;
}

串口信息

  • 编译、烧写到开发板,查看 串口的信息,当前配置的串口波特率是 115200 bps

  • 当前串口打印信息正常

uC-OS2 V2.93 STM32L476 移植:串口打印篇,uC-OS2,串口,printf,uC-OS2

小结

  • 本篇主要在 uC-OS2 上实现 类似于 printf 的串口格式化打印输出功能,适配串口驱动

  • 接下来,继续研究 uC-OS2 上实现串口的 shell 等功能,不断的深入熟悉 uC-OS2 的各个模块文章来源地址https://www.toymoban.com/news/detail-638471.html

到了这里,关于uC-OS2 V2.93 STM32L476 移植:串口打印篇的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • [低端局][cx32L003] 移植U8G2

    在低端芯片上使用U8G2 U8g2:单色显示库,版本2 U8g2是一个用于嵌入式设备的单色图形库。U8g2支持单色oled和lcd,其中包括以下控制器:Ssd1305、ssd1306、ssd1309、ssd1312、ssd1316、ssd1318、ssd1320、ssd1322、ssd1325、ssd1327、ssd1327、ssd1327、ssd1327、ssd1327、ssd1327、ssd1106、sh1107、sh1108、ssd1607、

    2024年02月13日
    浏览(30)
  • stm32---在keil 5中使用printf函数输出到串口USART(printf函数的移植方法)以及补充窗口printf函数输出汉字

    在串口函数初始化的c文件中加上#include stdio.h 重写fputc函数 (fputc是printf函数的底层,printf就是不断调用fputc函数一个个打印,把fputc函数重定向到串口,这样子printf自然就输出到串口) 在主函数main.c编写如下代码后直接运行. 引入#include stdarg.h  对sprintf进行可变参数的函数封装 在主

    2024年02月05日
    浏览(35)
  • STM32L151C8T6 芯片数据手册

    2024年02月12日
    浏览(36)
  • STM32L0 ADC使用HAL库关于校准问题的说明

    最近是有一个产品用到了ADC,使用的是STM32L051 芯片,使用 STM32CubeMX 生成的代码,本来以为简简单单,但是在调用 HAL ADC校准函数的时候遇到一个问题有点疑问,度娘一下也没有找到解答,还是经过翻阅了一些资料才得到答案,特此来记录一下。 我是矜辰所致,全网同名,尽

    2024年02月02日
    浏览(38)
  • 【STM32】基于HAL库建立自己的低功耗模式配置库(STM32L4系列低功耗所有配置汇总)

    【STM32】基于HAL库建立自己的低功耗模式配置库(STM32L4系列低功耗所有配置汇总) 此文章是讨论将先前所有的低功耗配置功能整合起来的一个库(适用于STM32L4系列) 目前除了普通唤醒方式外 加入了UART唤醒和RTC唤醒配置 如果后续有更多唤醒加入(如I2C等 将直接在后续的文章

    2024年02月19日
    浏览(32)
  • STM32L051使用HAL库操作实例(14)- ADC采集电压

    目录 一、前言 二、ADC外设简要说明 三、STM32CubeMX配置(本文使用的STM32CubeMX版本为6.1.2) 1.MCU选型 2.时钟使能 3.外部时钟配置 4.串口配置 5.ADC引脚配置 6.配置STM32CubeMX生成工程文件 7.点击GENERATE CODE生成工程文件 四、工程源码 五、运行状态 一、前言 本文主要介绍通过HAL库搭建

    2024年01月16日
    浏览(47)
  • 用STlink烧录工具和搭配STM32 ST-LINK Utility软件烧录STM32L051的方法

    用STlink烧录工具和搭配STM32 ST-LINK Utility软件烧录STM32L051的方法 1.下载安装软件 双击STM32 ST-LINK Utility v4.5.0.exe,按默认一直点下一步即可。 2.打开烧录软件 3.打开烧录代码 4.连接目标板 5.修改软件配置 6.重新连接目标板 7.点击烧录并校验 8.烧录校验成功 9.在烧录做以上动作之前

    2024年02月04日
    浏览(30)
  • 【格院】基于STM32L432KC之入坑MS Lab Part 3

    看题目要求 Exercise 6 - Creating constant output voltages a.Given the description of the range of analogue voltages that the mbed can output, what are the two output voltages that should appear on pin A4? b. Confirm the two output voltages in the code shown above are as you expect. c. Modify the code to output constant voltages of 0.5 V, 1.0 V, 2.0 V an

    2024年04月17日
    浏览(23)
  • 【STM32L496】使用HAL库实现SPI写入/读取数据(AD5421)

    SPI协议详解(图文并茂+超详细) SPI超详细解析 【STM32笔记】HAL库中的SPI传输(可利用中断或DMA进行连续传输) AD5421是一款集成器件,设计用于环路供电型4-20mA智能发射器应用。AD5421在单芯片内提供如下特性和功能:16位DAC和电流放大器,用于对环路电流进行数字控制;用于

    2024年02月03日
    浏览(58)
  • RT-Thread STM32L433 Ali Starterkit BSP说明

    本文档为STM32L433 Ali Starterkit Kit 提供的 BSP (板级支持包) 说明。 主要内容如下: 开发板资源介绍 BSP 快速上手 进阶使用方法 通过阅读快速上手章节开发者可以快速地上手该 BSP,将 RT-Thread 运行在开发板上。在进阶使用指南章节,将会介绍更多高级功能,帮助开发者利用 RT-T

    2024年02月05日
    浏览(27)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包