通過(guò)串口輸出打印信息
- 添加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調(diào)用
int main(void) { log_init(); log_func(); //assert_param(0); while (1) { } } }
}
異常處理
-
若無(wú)法正常打印信息,則查看keil5配置,需要 打開(kāi)use microLIB
審核編輯:湯梓紅
聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。
舉報(bào)投訴
-
N32
+關(guān)注
關(guān)注
0文章
18瀏覽量
7184 -
國(guó)民技術(shù)
+關(guān)注
關(guān)注
2文章
305瀏覽量
20346 -
Printf
+關(guān)注
關(guān)注
0文章
81瀏覽量
13608
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
【國(guó)民技術(shù)N32項(xiàng)目移植】BMS項(xiàng)目移植
移植bmsN32國(guó)民技術(shù)
Angel_YY
發(fā)布于 :2023年02月27日 15:53:27
N32G43XRL-STB開(kāi)發(fā)板硬件使用指南
N32G43XRL-STB 開(kāi)發(fā)板用于國(guó)民技術(shù)股份有限公司32位N32G43XRL系列MCU的開(kāi)發(fā)。本文檔詳細(xì)描述了N32G43XRL-STB
發(fā)表于 11-01 07:27
N32L43XRL-STB開(kāi)發(fā)板硬件使用指南
N32L43XRL-STB開(kāi)發(fā)板硬件使用指南開(kāi)發(fā)板用于國(guó)民技術(shù)股份有限公司32位N32L43XRL系列MCU的開(kāi)發(fā)。本文檔詳細(xì)描述了N32L43XR
發(fā)表于 11-01 06:48
【國(guó)民技術(shù)N32項(xiàng)目移植】N32G345XVL-STB項(xiàng)目移植 ——開(kāi)箱及開(kāi)發(fā)環(huán)境搭建
感謝Elecfans和國(guó)民技術(shù),能夠參與國(guó)民技術(shù)N32項(xiàng)目移
發(fā)表于 12-03 17:11
【國(guó)民技術(shù)N32項(xiàng)目移植】N32L43XRL-STB項(xiàng)目移植之基于IIC接口的OLED
IIC接口的OLED是平時(shí)實(shí)驗(yàn)中常用的顯示設(shè)備,和開(kāi)發(fā)板只需要四根線連接,VCC、GND、SDA、SCL。而且所使用的IIC經(jīng)常采用軟件模擬的方式實(shí)現(xiàn)。本次移植就是利用N32L436的兩個(gè)IO口模擬
發(fā)表于 12-23 08:35
【精品合集】國(guó)民技術(shù)N32開(kāi)源移植挑戰(zhàn)賽作品合集
( N32G45XVL-STB )【國(guó)民技術(shù)N32項(xiàng)目移植】智能溫濕度監(jiān)測(cè)系統(tǒng)
發(fā)表于 01-10 13:59
【國(guó)民技術(shù)N32項(xiàng)目移植】5. ADC應(yīng)用以及跳坑總結(jié)
SSD1306軟件包【國(guó)民技術(shù)N32項(xiàng)目移植】4. 硬件定時(shí)器實(shí)現(xiàn)2ms定時(shí)前言本文講解如何使用N
發(fā)表于 02-02 21:45
【國(guó)民技術(shù)N32項(xiàng)目移植】項(xiàng)目提交-物聯(lián)網(wǎng)心率監(jiān)控設(shè)備
過(guò)往分享【國(guó)民技術(shù)N32項(xiàng)目移植】1. 新建工程+LED與按鍵跳坑總結(jié)【國(guó)民
發(fā)表于 02-12 16:41
【國(guó)民技術(shù)N32項(xiàng)目移植】 RTT tcpclient測(cè)試
【國(guó)民技術(shù)N32項(xiàng)目移植】RTT AT ESP8266移植在
發(fā)表于 02-16 17:38
【國(guó)民技術(shù)N32項(xiàng)目移植】 串口支持printf有坑
的問(wèn)題,說(shuō)說(shuō)串口問(wèn)題。詳細(xì)描述本次使用了USB調(diào)試口自帶的串口1(PA9,PA10),程序編寫(xiě)參照官方例程,沒(méi)什么問(wèn)題,畢竟 N32的庫(kù)還是和經(jīng)典的ST標(biāo)準(zhǔn)庫(kù)非常相似的。正常的
發(fā)表于 02-18 22:09
【國(guó)民技術(shù)N32項(xiàng)目移植】FOC項(xiàng)目移植之環(huán)境搭建
FOC項(xiàng)目移植之環(huán)境搭建很高興能夠參加國(guó)民技術(shù)N32開(kāi)源移植挑戰(zhàn)賽,本人這次將在RT-Threa
發(fā)表于 02-24 13:53
【國(guó)民技術(shù)N32項(xiàng)目移植】easypower 結(jié)論
經(jīng)過(guò)簡(jiǎn)單的移植和調(diào)試,比較順利的完成。本設(shè)計(jì)比較簡(jiǎn)單,國(guó)民技術(shù)的軟件庫(kù)和例程也比較完善。所以還是容易的。只是在原來(lái)設(shè)計(jì)的板子上做移植和驗(yàn)證。
發(fā)表于 02-28 23:49
國(guó)民技術(shù)N32G43XRL-STB開(kāi)發(fā)板資料
國(guó)民技術(shù)N32G43XRL-STB開(kāi)發(fā)板資料
發(fā)表于 11-07 15:33
?10次下載
【國(guó)民技術(shù)N32項(xiàng)目移植】N32L43XRL-STB串口調(diào)試 nr_micro_shell移植
【國(guó)民技術(shù)N32項(xiàng)目移植】N32L43XRL-STB串口
評(píng)論