野火科技
直播中

meiyaolei

12年用户 424经验值
擅长:测量仪表,连接器,EMC/MEI设计,处理器/DSP,接口/总线/驱动,控制/MCU
私信 关注
[经验]

【野火启明6M5开发板体验】UART+ADC

本篇继续测评野火启明6M5开发板体验UART+ADC。
开发平台还是以KEIL开发环境:IDE:MKD 5.37
开发板:野火启明RA6M5开发板
MCU:R7FA6M5BH3CFC
1、先来个串口基础知识:
串行接口是一种可以将接收来自CPU的并行数据字符转换为连续的串行数据流发送出去,同时可将接收的串行数据流转换为并行的数据字符供给CPU的器件。一般完成这种功能的电路,我们称为串行接口电路。
串口通信(Serial Communications)的概念非常简单,串口按位(bit)发送和接收字节的通信方式。(这个是百度百科里面搜索的,大约就是这个意思,理解一下)

6M5串口的原理图如下:

TYPE C连接CH340G,再通过CH340G连接MCU。
image.png

CH340G过来的RX TX,P511 P512连接到MCU R7FA6M5BH3CFC 175 176脚IO口。

image.png

2.ADC特性:

  1. 2 个 ADC 转换单元。

  2. 可以进行 TrustZone 安全设置。

  3. 支持内部温度检测,内部参考电压。

  4. 逐次逼近型 ADC,支持的分辨率: 12-bit, 10-bit, 8-bit。

  5. 转换时间短: 0.4 μs/每通道(12-bit ADC、时钟 PCLKC (ADCLK) 等于 50 MHz 的条件下)。

  6. 可启用 A/D 数据存储缓冲区是一个环形缓冲区,由 16 个缓冲区组成,用于顺序存储 A/D
    转换后的数据。

  7. 自诊断在每次扫描开始时执行一次,在 ADC 执行生成中的三个参考电压值中选择一个 A/D
    转换值。
    ADC 即模拟数字转换器, ADC 英文全称(Analog-to-digital converter),是一种用于将模拟电压的
    连续信号转换为离散的数字信号。就比如我们可以将我们生活中的温度、压力、声音这样的模拟
    信号通过 ADC 转化为我们可以通过单片机处理的数字信号。

    原理图:本来是想用个NTC的,结果板载上有个电位器,原理是一样的,所以就引用电位器读取电压值。
    image.png
    ADC IO引脚是MCU上169脚,P000.这个IO口上ADC有AN000和AD100.

3.框图:
串口
image.png

ADC
image.png

4.配置
串口:
image.png
image.png

ADC:
image.png

PIN配置总图;

image.png

5.输出结果:
image.png

6、代码:
串口
初始
fsp_err_t err = FSP_SUCCESS;
err = R_SCI_UART_Open (&g_uart4_ctrl, &g_uart4_cfg);
assert(FSP_SUCCESS == err);

回调函数
switch (p_args->event)
{
case UART_EVENT_RX_CHAR:
{
/* 把串口接收到的数据发送回去 */
R_SCI_UART_Write(&g_uart4_ctrl, (uint8_t *)&(p_args->data), 1);
break;
}
case UART_EVENT_TX_DATA_EMPTY:
{
uart_send_complete_flag = true;
break;
}
default:
break;
}

ADC
初始
fsp_err_t err;
err = R_ADC_Open(&g_adc0_ctrl, &g_adc0_cfg);
err = R_ADC_ScanCfg(&g_adc0_ctrl, &g_adc0_channel_cfg);
assert(FSP_SUCCESS == err);

读ADC值
uint16_t adc_data;
double a0;

(void)R_ADC_ScanStart(&g_adc0_ctrl);
scan_complete_flag = false;
while (!scan_complete_flag)
{
    ;
}

R_ADC_Read(&g_adc0_ctrl, ADC_CHANNEL_0, &adc_data);
a0 = (double)(adc_data*3.3/4095);
return a0;

主函数读ADC的值,并通过串口打印出来
R_SCI_UART_Open (&g_uart4_ctrl, &g_uart4_cfg);
printf("开始读取ADC的数值\r\n");

printf("a0=%f\r\n",adc_read());
R_BSP_SoftwareDelay(100,BSP_DELAY_UNITS_MILLISECONDS); //1秒钟读取一次

7、视频

78cfb9db0bb1d637b6f5568c60cccf4f

更多回帖

发帖
×
20
完善资料,
赚取积分