[Follow me第二季第3期] [扩展任务] DAC输出不同波形,FLASH保存和读取历史数据
[复制链接]
简介
拓展任务的要求的要求设计一个类似信号发生器功能的例程。可在示例程序上修改。通过命令或按键,设置DAC输出波形,可通过flash存储历史波形等信息。 那么对于这个任务一共分为三点.即 (1) 命令或者按键 (2)DAC输出 (3)Flash的读取和写入。
对于命令或者按键我们已经在进阶任务和入门任务中完成了。所以可以参考之前的实现逻辑。 对于DAC的输出,我们已经在基础任务中正确实现了。 而对于(3)Flash的读取和写入,我们则可以参考基础任务中的SPI写和读的相关函数。
实现过程
1 - 菜单功能实现,设计菜单和子菜单。
子菜单
2- 生成正弦波和三角波,和DAC输出函数
DAC输出生成后的波形数据
3 - QSPI Flash的读和写,操作。在这里非常感谢活动交流群内的各位大佬提供的帮助, 以及同期参加活动的小伙伴们, 我这里在操作QSPI的时候没有成功,后经过他们的帮助后成功的从QSPI读取到了数据。
void saveToFlash(uint8_t *buffer)
{
fsp_err_t err = FSP_SUCCESS;
uint32_t page_write_count = 0;
uint8_t *p_mem_addr = (uint8_t*) QSPI_DEVICE_START_ADDRESS;
spi_flash_protocol_t current_spi_mode;
p_mem_addr = (uint8_t*) QSPI_DEVICE_START_ADDRESS;
err = qpi_init ();
if (FSP_SUCCESS == err)
{
/* The comms mode has changed. So if recovering, this new mode required */
current_spi_mode = g_qspi_cfg.spi_protocol;
}
/* 擦除 QSPI 的指定扇区 */
err = R_QSPI_Erase (&g_qspi_ctrl, p_mem_addr, 4096U);
if (FSP_SUCCESS != err)
{
sprintf (s_print_buffer, "Failed to erase QSPI flash\r\n");
print_to_console ((void*) s_print_buffer);
return;
}
/* 等待擦除完成 */
err = get_flash_status ();
if (FSP_SUCCESS != err)
{
sprintf (s_print_buffer, "Failed to get flash status after erase\r\n");
print_to_console ((void*) s_print_buffer);
return;
}
err = R_QSPI_Write (&g_qspi_ctrl, &buffer[0], p_mem_addr, 1);
if (FSP_SUCCESS != err)
{
sprintf (s_print_buffer, "Failed to write data to QSPI flash\r\n");
print_to_console ((void*) s_print_buffer);
}
else
{
err = get_flash_status ();
if (FSP_SUCCESS != err)
{
sprintf (s_print_buffer, "Failed to get flash status after write\r\n");
print_to_console ((void*) s_print_buffer);
}
}
deinit_qspi (current_spi_mode);
}
当用户输入1 或者 2 的时候,那么将当前的波形信息保存到Flash里
当用户输入3的时候使能输出。
视频效果展示
2024-12-11 22-04-00
|