0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

【国民技术N32项目移植】N32L43XRL-STB串口调试 使用printf打印日志

flying 来源:下下限 作者:下下限 2023-01-05 09:08 次阅读

通过串口输出打印信息

  • 添加log.c
    #include "log.h"
    
    #if LOG_ENABLE
    
    #include "n32l43x.h"
    #include "n32l43x_gpio.h"
    #include "n32l43x_usart.h"
    #include "n32l43x_rcc.h"
    
    #define LOG_USARTx      USART1
    #define LOG_PERIPH      RCC_APB2_PERIPH_USART1
    #define LOG_GPIO        GPIOA
    #define LOG_PERIPH_GPIO RCC_APB2_PERIPH_GPIOA
    #define LOG_TX_PIN      GPIO_PIN_9
    #define LOG_RX_PIN      GPIO_PIN_10
    
    void log_init(void)
    {
        GPIO_InitType GPIO_InitStructure;
        USART_InitType USART_InitStructure;
    
        GPIO_InitStruct(&GPIO_InitStructure);
    
        RCC_EnableAPB2PeriphClk(RCC_APB2_PERIPH_AFIO | LOG_PERIPH_GPIO, ENABLE);
    
        RCC_EnableAPB2PeriphClk(LOG_PERIPH, ENABLE);
    
    
        GPIO_InitStructure.Pin        = LOG_TX_PIN;
        GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_AF_PP;
        GPIO_InitStructure.GPIO_Slew_Rate = GPIO_Slew_Rate_High;
    		GPIO_InitStructure.GPIO_Alternate = GPIO_AF4_USART1;
        GPIO_InitPeripheral(LOG_GPIO, &GPIO_InitStructure);
    
        GPIO_InitStructure.Pin       = LOG_RX_PIN;
        GPIO_InitStructure.GPIO_Pull = GPIO_Pull_Up;
    	  GPIO_InitStructure.GPIO_Alternate = GPIO_AF4_USART1;
        GPIO_InitPeripheral(LOG_GPIO, &GPIO_InitStructure);
    
        USART_InitStructure.BaudRate            = 115200;
        USART_InitStructure.WordLength          = USART_WL_8B;
        USART_InitStructure.StopBits            = USART_STPB_1;
        USART_InitStructure.Parity              = USART_PE_NO;
        USART_InitStructure.HardwareFlowControl = USART_HFCTRL_NONE;
        USART_InitStructure.Mode                = USART_MODE_RX | USART_MODE_TX;
    
        // init uart
        USART_Init(LOG_USARTx, &USART_InitStructure);
    
        // enable uart
        USART_Enable(LOG_USARTx, ENABLE);
    }
    
    
    int fputc(int ch, FILE* f)
    {
        USART_SendData(LOG_USARTx, (uint8_t)ch);
        while (USART_GetFlagStatus(LOG_USARTx, USART_FLAG_TXDE) == RESET)
            ;
    
        return (ch);
    }
    
    #ifdef USE_FULL_ASSERT
    
    __WEAK void assert_failed(const uint8_t* expr, const uint8_t* file, uint32_t line)
    {
        log_error("assertion failed: `%s` at %s:%d", expr, file, line);
        while (1)
        {
        }
    }
    #endif // USE_FULL_ASSERT
    
    #endif // LOG_ENABLE
    #endif // LOG_ENABLE
    
    #endif // LOG_ENABLE
  • 添加log.h
    #ifndef __LOG_H__
    #define __LOG_H__
    
    #ifndef LOG_ENABLE
    #define LOG_ENABLE 1
    #endif
    
    #if LOG_ENABLE
    
    #include 
    
    #define LOG_NONE    0
    #define LOG_ERROR   10
    #define LOG_WARNING 20
    #define LOG_INFO    30
    #define LOG_DEBUG   40
    
    #ifndef LOG_LEVEL
    #define LOG_LEVEL LOG_DEBUG
    #endif
    
    #if LOG_LEVEL >= LOG_INFO
    #define log_info(...) printf(__VA_ARGS__)
    #else
    #define log_info(...)
    #endif
    
    #if LOG_LEVEL >= LOG_ERROR
    #define log_error(...) printf(__VA_ARGS__)
    #else
    #define log_error(...)
    #endif
    
    #if LOG_LEVEL >= LOG_WARNING
    #define log_warning(...) printf(__VA_ARGS__)
    #else
    #define log_warning(...)
    #endif
    
    #if LOG_LEVEL >= LOG_DEBUG
    #define log_debug(...) printf(__VA_ARGS__)
    #else
    #define log_debug(...)
    #endif
    
    void log_init(void);
    
    #else /* !LOG_ENABLE */
    
    #define log_info(...)
    #define log_warning(...)
    #define log_error(...)
    #define log_debug(...)
    #define log_init()
    
    #endif
    
    #define log_func() log_debug("call %s [%d]\\r\\n", __FUNCTION__,__LINE__)
    
    #endif /* __LOG_H__ */
    #endif /* __LOG_H__ */
    
    #endif /* __LOG_H__ */
  • man调用
    int main(void)
    {
        log_init();
    
        log_func();
    	//assert_param(0);
        while (1)
        {
    
        }
    }
    }
    
    }

异常处理

  • 若无法正常打印信息,则查看keil5配置,需要 打开use microLIB

    image.png
    审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • N32
    N32
    +关注

    关注

    0

    文章

    18

    浏览量

    7113
  • 国民技术
    +关注

    关注

    2

    文章

    288

    浏览量

    19960
  • Printf
    +关注

    关注

    0

    文章

    79

    浏览量

    13474
收藏 人收藏

    评论

    相关推荐

    国民技术N32项目移植】BMS项目移植

    移植bmsN32国民技术
    Angel_YY
    发布于 :2023年02月27日 15:53:27

    N32G43XRL-STB开发板硬件使用指南

    N32G43XRL-STB 开发板用于国民技术股份有限公司32位N32G43XRL系列MCU的开发。本文档详细描述了N32G43XRL-STB
    发表于 11-01 07:27

    N32L43XRL-STB开发板硬件使用指南

    N32L43XRL-STB开发板硬件使用指南开发板用于国民技术股份有限公司32位N32L43XRL系列MCU的开发。本文档详细描述了N32L43XR
    发表于 11-01 06:48

    国民技术N32项目移植N32G345XVL-STB项目移植 ——开箱及开发环境搭建

    感谢Elecfans和国民技术,能够参与国民技术N32项目
    发表于 12-03 17:11

    国民技术N32项目移植N32L43XRL-STB项目移植之基于IIC接口的OLED

    IIC接口的OLED是平时实验中常用的显示设备,和开发板只需要四根线连接,VCC、GND、SDA、SCL。而且所使用的IIC经常采用软件模拟的方式实现。本次移植就是利用N32L436的两个IO口模拟
    发表于 12-23 08:35

    【精品合集】国民技术N32开源移植挑战赛作品合集

    N32G45XVL-STB )【国民技术N32项目移植】智能温湿度监测系统
    发表于 01-10 13:59

    国民技术N32项目移植】4. 硬件定时器实现2ms定时

    过往分享【国民技术N32项目移植】1. 新建工程+LED与按键跳坑总结【国民
    发表于 01-31 22:22

    国民技术N32项目移植】5. ADC应用以及跳坑总结

    SSD1306软件包【国民技术N32项目移植】4. 硬件定时器实现2ms定时前言本文讲解如何使用N
    发表于 02-02 21:45

    国民技术N32项目移植项目提交-物联网心率监控设备

    过往分享【国民技术N32项目移植】1. 新建工程+LED与按键跳坑总结【国民
    发表于 02-12 16:41

    国民技术N32项目移植】 RTT tcpclient测试

    国民技术N32项目移植】RTT AT ESP8266移植
    发表于 02-16 17:38

    国民技术N32项目移植串口支持printf有坑

    的问题,说说串口问题。详细描述本次使用了USB调试口自带的串口1(PA9,PA10),程序编写参照官方例程,没什么问题,毕竟 N32的库还是和经典的ST标准库非常相似的。正常的
    发表于 02-18 22:09

    国民技术N32项目移植】FOC项目移植之环境搭建

    FOC项目移植之环境搭建很高兴能够参加国民技术N32开源移植挑战赛,本人这次将在RT-Threa
    发表于 02-24 13:53

    国民技术N32项目移植】easypower 结论

    经过简单的移植调试,比较顺利的完成。本设计比较简单,国民技术的软件库和例程也比较完善。所以还是容易的。只是在原来设计的板子上做移植和验证。
    发表于 02-28 23:49

    N32L43XRL-STB (LQFP64) 开发板

    N32L43XRL-STB (LQFP64) 开发板
    发表于 11-10 19:51 0次下载
    <b class='flag-5'>N32L43XRL-STB</b> (LQFP64) 开发板

    国民技术N32项目移植N32L43XRL-STB串口调试 nr_micro_shell移植

    国民技术N32项目移植N32L43XRL-STB串口
    的头像 发表于 01-05 09:10 1403次阅读
    【<b class='flag-5'>国民</b><b class='flag-5'>技术</b><b class='flag-5'>N32</b><b class='flag-5'>项目</b><b class='flag-5'>移植</b>】<b class='flag-5'>N32L43XRL-STB</b><b class='flag-5'>串口</b><b class='flag-5'>调试</b> nr_micro_shell<b class='flag-5'>移植</b>