
串口使用USB串口吧,节省USB口线!!!!!

使用串口通信实现花样流水灯操作,本次测评通过使用串口助手发送数据来控制RA4M2的流水灯操作,总共有9中模式:
(1)发送0,3个LED全灭

(2)发送1,3个LED全亮

(3)发送2,LED1,LED2, LED3依次电量,间隔200ms,全亮后再重复这个流程

(4)发送3,LED1先亮200ms,然后熄灭同时LED2亮200ms,然后熄灭同时LED3亮200ms,然后熄灭同时LED1,重复这个循环。

(5)发送4,3个LED同时亮200ms,然后3个LED熄灭200ms,然后3个LED亮200ms,重复这个循环。

(6)发送5,LED1和LED2同时亮200ms,然后LED1熄灭同时LDE3亮200ms,然后LED2熄灭LED1亮200ms,然后重复这个循环。

(7)发送6,LED3,LED2, LED1依次电量,间隔200ms,全亮后再重复这个流程。

(8)发送7,LED1,LED3同时亮500ms,LED2熄灭,然后LED1,LED3同时熄灭500ms,LED2亮500ms,重复这个循环。

(9)发送8,LED1亮250ms后翻转250ms,LED2亮500ms后翻转500ms,LED3亮250ms后翻转250ms。重复这个过程。

好了,开始整活!!!!!!!!
2。打开
新建工程,取名liushuiLED

选择芯片型号

不带RTOS


3。设置LED1,LED2,LED3
LED1--P405
LED2--P404
LED3--P002




4。设置串口,选取USB串口


5。生成代码
打开keil工程

选择好芯片型号

选择JLINK


编译一遍,
发现错误

是因为我们没有实现串口中断函数。
6。实现串口中断函数
#include "hal_data.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
FSP_CPP_HEADER
void R_BSP_WarmStart(bsp_warm_start_event_t event);
FSP_CPP_FOOTER
#define USART_REC_LEN 50 //定义最大接收字节数 50
#define First_String "Receive:" //返回给PC端的起始字符串
#define First_String_num strlen(First_String) //起始字符串长度
#define g_uartx_ctrl g_uart9_ctrl //如果是串口9需要printf重映射,就写g_uart9_ctrl
volatile bool uart_send_complete_flag = false; // 发送完成标志
uint8_t USART_RX_BUF[USART_REC_LEN] = First_String; //接收缓冲,最大USART_REC_LEN个字节.起始字符串为First_String的宏定义
uint16_t USART_RX_STA = First_String_num; //接收状态标记,根据起始字符串来初始化起始字符位置
void UART9_Init(void)
{
fsp_err_t err = FSP_SUCCESS;
err = R_SCI_UART_Open(&g_uart9_ctrl,&g_uart9_cfg);
assert(err == FSP_SUCCESS);
}
void Serial(uart_callback_args_t * p_args)
{
switch (p_args->event)
{
//如果是串口接收中断
case UART_EVENT_RX_CHAR:
{
}
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_UART_Write(&g_uartx_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_UART_Write(&g_uartx_ctrl, (uint8_t *)&ch, 1);
while(uart_send_complete_flag == false);
uart_send_complete_flag = false;
return ch;
}
#endif

下载烧录板子,观察串口输出

发觉正常
7。 实现流水灯的9种模式切换。
(1)发送0,3个LED全灭



(2)发送1,3个LED全亮



(3)发送2,LED1,LED2, LED3依次电量,间隔400ms,全亮后再重复这个流程。



(4)发送3,LED1先亮200ms,然后熄灭同时LED2亮200ms,然后熄灭同时LED3亮200ms,然后熄灭同时LED1,重复这个循环。



(5)发送4,3个LED同时亮200ms,然后3个LED熄灭200ms,然后3个LED亮200ms,重复这个循环。



(6)发送5,LED1和LED2同时亮200ms,然后LED1熄灭同时LDE3亮200ms,然后LED2熄灭LED1亮200ms,然后重复这个循环。



(7)发送6,LED3,LED2, LED1依次电量,间隔400ms,全亮后再重复这个流程。



(8)发送7,LED1,LED3同时亮500ms,LED2熄灭,然后LED1,LED3同时熄灭500ms,LED2亮500ms,重复这个循环。



(9)发送8,LED1亮250ms后翻转250ms,LED2亮500ms后翻转500ms,LED3亮250ms后翻转250ms。重复这个过程。




观察流水灯效果,符合预期,详情请看视频展示效果