本篇继续测评野火启明6M5开发板体验UART+ADC。
开发平台还是以KEIL开发环境:IDE:MKD 5.37
开发板:野火启明RA6M5开发板
MCU:R7FA6M5BH3CFC
1、先来个串口基础知识:
串行接口是一种可以将接收来自CPU的并行数据字符转换为连续的串行数据流发送出去,同时可将接收的串行数据流转换为并行的数据字符供给CPU的器件。一般完成这种功能的电路,我们称为串行接口电路。
串口通信(Serial Communications)的概念非常简单,串口按位(bit)发送和接收字节的通信方式。(这个是百度百科里面搜索的,大约就是这个意思,理解一下)
6M5串口的原理图如下:
TYPE C连接CH340G,再通过CH340G连接MCU。
CH340G过来的RX TX,P511 P512连接到MCU R7FA6M5BH3CFC 175 176脚IO口。
2.ADC特性:
2 个 ADC 转换单元。
可以进行 TrustZone 安全设置。
支持内部温度检测,内部参考电压。
逐次逼近型 ADC,支持的分辨率: 12-bit, 10-bit, 8-bit。
转换时间短: 0.4 μs/每通道(12-bit ADC、时钟 PCLKC (ADCLK) 等于 50 MHz 的条件下)。
可启用 A/D 数据存储缓冲区是一个环形缓冲区,由 16 个缓冲区组成,用于顺序存储 A/D
转换后的数据。
自诊断在每次扫描开始时执行一次,在 ADC 执行生成中的三个参考电压值中选择一个 A/D
转换值。
ADC 即模拟数字转换器, ADC 英文全称(Analog-to-digital converter),是一种用于将模拟电压的
连续信号转换为离散的数字信号。就比如我们可以将我们生活中的温度、压力、声音这样的模拟
信号通过 ADC 转化为我们可以通过单片机处理的数字信号。
原理图:本来是想用个NTC的,结果板载上有个电位器,原理是一样的,所以就引用电位器读取电压值。
ADC IO引脚是MCU上169脚,P000.这个IO口上ADC有AN000和AD100.
3.框图:
串口
ADC
4.配置
串口:
ADC:
PIN配置总图;
5.输出结果:
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、视频
更多回帖