微信公眾號?| strongerHuang
串口是最常見的通信方式之一,也是單片機調(diào)試最常見的通信接口,也是現(xiàn)在的單片機必備的通信接口,目前(2024-05)最新、最強的Cortext-M85內(nèi)核的RA8系列單片機也不例外。
今天就結(jié)合瑞薩Cortext-M85內(nèi)核RA8系列單片機給大家講講串口輸出實現(xiàn)的方法,簡單到只需要一分鐘左右即可配置好。
準(zhǔn)備工作
要快速使用瑞薩Cortext-M85內(nèi)核RA8系列單片機,需要有一些準(zhǔn)備工作。
1、下載安裝集成開發(fā)環(huán)境
瑞薩單片機的集成開發(fā)工具(IDE)有很多,比如:瑞薩自家的e2s、Keil、 IAR等。
2、準(zhǔn)備硬件板卡
雖然現(xiàn)在仿真工具都可以實現(xiàn)單片機的要一些功能,但我們最好還是在硬件實物上跑程序更能學(xué)會技術(shù)。
本教程就使用瑞薩CPKCOR_RA8D1B評估板,這塊板卡使用RA8D1單片機,并集成了J-link,我們只需要用一根線連接電腦即可下載調(diào)試。
當(dāng)然,如果你板卡沒有集成J-Link,就需要單獨準(zhǔn)備一個。
以上就是主要的準(zhǔn)備工作,其實也挺簡單,入門都要準(zhǔn)備的工作。
一分鐘上手Cortext-M85單片機串口
e2s集成了很多功能,我們只需要動動鼠標(biāo)就能快速創(chuàng)建并生成一個工程。
1、基于e2s快速創(chuàng)建一個工程
打開e2s,文件 -> 新建?-> 瑞薩C/C++項目?-> Renesas RA:
輸入工程名稱,比如我們輸入RA8D1_UART:
選擇單片機型號,比如R7FA8D1BHEC:
然后,根據(jù)提示,一步一步下去,就可以創(chuàng)建一個RA8工程:
2、配置串口
這里只需要根據(jù)圖形化界面,簡單配置一下串口即可使用串口。
我們在引腳(Pins)的位置,選擇外設(shè)(Peripherals)-> SLI4,配置成異步通信模式:
在 Stacts -> New Stacts,新建一個UART:
然后,在配置一下UART參數(shù)(屬性):
這里根據(jù)自己情況修改幾個主要參數(shù),其他大多數(shù)默認(rèn)即可,如果需要中斷,就需要自己定義一個中斷回調(diào)函數(shù):
如果要使用printf就還需要配置兩個地方,1、heap棧大?。?、工程設(shè)置。
接下來就是添加代碼了,我們添加兩個源文件:bsp_debug_uart.h和bsp_debug_uart.c
其中bsp_debug_uart.h就是包含頭文件,以及聲明函數(shù)。
#ifndef __BSP_DEBUG_UART_H
#define __BSP_DEBUG_UART_H
#include "hal_data.h"
#include <stdio.h>
void Debug_UART4_Init(void);
#endif
其中bsp_debug_uart.c源文件也比較簡單:
#include "bsp_debug_uart.h"
/* 調(diào)試串口 UART4 初始化 */
void Debug_UART4_Init(void)
{
fsp_err_t err = FSP_SUCCESS;
err = R_SCI_B_UART_Open(&g_uart4_ctrl, &g_uart4_cfg);
assert(FSP_SUCCESS == err);
}
/* 發(fā)送完成標(biāo)志 */
volatile bool uart_send_complete_flag = false;
/* 串口中斷回調(diào) */
void debug_uart4_callback (uart_callback_args_t * p_args)
{
switch (p_args->event)
{
case UART_EVENT_RX_CHAR:
{
/* 把串口接收到的數(shù)據(jù)發(fā)送回去 */
R_SCI_B_UART_Write(&g_uart4_ctrl, (uint8_t *)&(p_args->data), 1);
break;
}
case UART_EVENT_TX_COMPLETE:
{
uart_send_complete_flag = true;
break;
}
default:
break;
}
}
/* 重定向 printf 輸出 */
#if defined __GNUC__ && !defined __clang__
int _write(int fd, char *pBuffer, int size); //防止編譯警告
int _write(int fd, char *pBuffer, int size)
{
(void)fd;
R_SCI_B_UART_Write(&g_uart4_ctrl, (uint8_t *)pBuffer, (uint32_t)size);
while(uart_send_complete_flag == false);
uart_send_complete_flag = false;
return size;
}
#else
int fputc(int ch, FILE *f)
{
(void)f;
R_SCI_B_UART_Write(&g_uart4_ctrl, (uint8_t *)&ch, 1);
while(uart_send_complete_flag == false);
uart_send_complete_flag = false;
return ch;
}
#endif
這樣下來就算完成了,你往單片機發(fā)送什么字符,它就會給你發(fā)回來,比如:往里面發(fā)字符“A”
到這里就完成了一個RA8單片機串口的配置,是不是很簡單?對于有一定基礎(chǔ)的朋友,基本上一分鐘就能搞定。