【瑞萨RA MCU创意氛围赛】1. PWM驱动LED以及STLINK下载配置
前言学习C语言,最开始学习的就是printf和scanf,用于接收信息和打印信息,但是在电脑上,printf和scanf都是通过命令行窗口来执行的,单片机上如何做呢? 其实对于不同的IDE,具体做法是不一样的,本文以KEIL为例,讲述如何将串口打印和接收功能重定向到printf和scanf。 1. 串口硬件连接如下图,可以看到USB-UART连接线路图,其中: 我们选择这两个引脚来作为串口引脚,就可以直接使用Type-C USB进行串口连接了。
2. 配置打开RASC,配置SCI4,复用为异步串口或者同步串口,我选择使用异步串口,需要配合中断一起使用。
配置stack:
详细配置信息:
3 代码实现在KEIL下,如果需要实现printf打印和scanf接收,需要实现fputc和fgetc。 app_uart.c实现如下: - /*
- @hehung
- 2023-5-22
- email: 1398660197@qq.com
- wechat: hehung95
- reproduced and please indicate the source @hehung
- */
- #include "hal_data.h"
- #include "app_uart.h"
- static volatile bool uart4_send_complete_flag = false;
- static volatile bool uart4_recv_complete_flag = false;
- static volatile uint32_t uart4_recv_char = '\0';
- // Uart initialize
- void Uart_Init(void)
- {
- fsp_err_t err = FSP_SUCCESS;
- /* Open the transfer instance with initial configuration. */
- err = R_SCI_UART_Open(&g_uart4_ctrl, &g_uart4_cfg);
- assert(FSP_SUCCESS == err);
- }
- // callback function for uart9
- void uart4_notification(uart_callback_args_t * p_args)
- {
- if (p_args->event == UART_EVENT_TX_COMPLETE)
- {
- uart4_send_complete_flag = true;
- }
- else if (p_args->event == UART_EVENT_RX_CHAR)
- {
- uart4_recv_char = p_args->data;
- uart4_recv_complete_flag = true;
- }
- }
- // fputs for printf or other print function in standard
- int fputc(int ch, FILE *f)
- {
- fsp_err_t err = FSP_SUCCESS;
- (void)f;
- err = R_SCI_UART_Write(&g_uart4_ctrl, (uint8_t *)&ch, 1);
- if(FSP_SUCCESS != err)
- __BKPT();
- /* Waiting until transmit finished */
- while(uart4_send_complete_flag == false)
- {}
- uart4_send_complete_flag = false;
- return ch;
- }
- // fgets for scanf or other input function in standard
- int fgetc(FILE *f)
- {
- (void)f;
- while (uart4_recv_complete_flag == false)
- {}
- uart4_recv_complete_flag = false;
- return (int)uart4_recv_char;
- }
复制代码
app_uart.h - /*
- @hehung
- 2023-5-22
- email: 1398660197@qq.com
- wechat: hehung95
- reproduced and please indicate the source @hehung
- */
- #ifndef __APP_UART_H
- #define __APP_UART_H
- #include "stdio.h"
- extern void Uart_Init(void);
- #endif
复制代码
main.c中实现如下逻辑: 先使用printf打印一些信息 然后使用scanf读取一个整数,在打印出来。 - printf ("Initialize finished!\r\n");
- printf ("This is a test\r\n");
- printf ("1+2=%d\r\n", 1+2);
- printf ("---------------------\r\n");
- int a;
- printf ("Please input a number with int type: \r\n");
- scanf ("%d", &a);
- printf ("The number you input is :%d", a);
复制代码
4. 实现效果打开串口调试工具,选择CMO口,波特率设置为115200。
|