简易信号发生器(一)

发布时间:2026/7/13 19:54:37
简易信号发生器(一) 整体的想法是通过串口屏进行数据调整FPGA进行信号输出。第一阶段实现了串口屏输入数据传入stm32f407再传入FPGA接受数据。一、串口屏调试数据发送以02 03作为帧头FF FF FF作为帧尾。和单片机通过usart3进行数据传输。二、单片机通过stm32 cubemx进行引脚配置配置usart1和电脑进行通信usart3和单片机进行通信。再选取了一组引脚模拟spi通信传数据到FPGA。1.串口屏和单片机通信关键代码void USART3_IRQHandler(void) { /* USER CODE BEGIN USART3_IRQn 0 */ if(__HAL_UART_GET_FLAG(huart3, UART_FLAG_RXNE) ! RESET) { uint8_t Res (uint8_t)(huart3.Instance-DR 0x00FF); if ((HMI_RX_STA 0x8000) 0) { // 接收未完成 // 检查缓冲区溢出 if ((HMI_RX_STA 0x7FFF) HMI_RX_BUF_SIZE) { HMI_RX_BUF[HMI_RX_STA 0x7FFF] Res; HMI_RX_STA; } else { HMI_RX_STA 0; // 溢出复位 } // 检查帧尾 (FF FF FF) if ((HMI_RX_STA 3) (HMI_RX_BUF[(HMI_RX_STA 0x7FFF) - 3] 0xFF) (HMI_RX_BUF[(HMI_RX_STA 0x7FFF) - 2] 0xFF) (HMI_RX_BUF[(HMI_RX_STA 0x7FFF) - 1] 0xFF)) { HMI_RX_STA | 0x8000; // 标记接收完成 } } } /* USER CODE END USART3_IRQn 0 */ HAL_UART_IRQHandler(huart3); /* USER CODE BEGIN USART3_IRQn 1 */ /* USER CODE END USART3_IRQn 1 */ }uint32_t HMI_Pow(uint8_t n); void HMI_SendNum(UART_HandleTypeDef* huart, uint8_t *data, uint8_t len, uint16_t Num, uint8_t len2); void HMI_SendText(UART_HandleTypeDef* huart, uint8_t *data, uint8_t len, uint8_t *text, uint8_t len2); void HMI_SendNum_SingleByte(UART_HandleTypeDef* huart, uint8_t *data, uint8_t len, uint16_t Num, uint8_t len2);while (1) { /* USER CODE END WHILE */ if (HMI_RX_STA 0x8000) { // 接收完成 uint16_t len HMI_RX_STA 0x7FFF; // 校验帧头和数据长度至少7字节帧头2 数据2 补位1 帧尾3 if (len 8 HMI_RX_BUF[0] 0x02 HMI_RX_BUF[1] 0x03) { uint32_t n0_val (HMI_RX_BUF[4] 16) | (HMI_RX_BUF[3] 8) | HMI_RX_BUF[2]; printf(n0_val%d,n0_val); } HMI_RX_STA 0; // 清除所有状态位 } spi_wr_32bit_MSB_first(HMI_RX_BUF[2], HMI_RX_BUF[3], HMI_RX_BUF[4], 0x00); /* USER CODE BEGIN 3 */ }通过如上代码可以看到串口屏已成功传数据到单片机中。三、FPGA这一步用的是模拟spi通信一次传输一个数据进行调整现阶段已经足够。