FPGA与STM32串口通信

简介: FPGA与STM32串口通信

FPGA中,添加一个TTL串口;与STM32串口通信引脚相连。波特率一致;

FPGA:

{ //i1=0;
alt_u16 status9;
do
{ status9 =IORD_ALTERA_AVALON_UART_STATUS(UART_TTL_BASE);

void uart_stm32_isr(void *context,alt_u32 id)//中断服务函数

//等待发送完成

}
while (!(status9& ALTERA_AVALON_UART_STATUS_RRDY_MSK));
read_temp[i2]=IORD_ALTERA_AVALON_UART_RXDATA(UART_TTL_BASE);

//接收数据

if (read_temp[0]==0xFF)
{ i2=i2+1;
}


//read_temp[0]=IORD_ALTERA_AVALON_UART_RXDATA(UART_TTL_BASE);//接收数据

if (i2==5)
{ i2=0;


stm32_flag_RF=1;//接收完一组,标志置为1
}
IOWR_ALTERA_AVALON_UART_STATUS(UART_TTL_BASE,0);



//清除接收缓冲区

}
void uart_send(unsigned char data)//uart发送单个字节
{ alt_u8 status;
status=IORD_ALTERA_AVALON_UART_STATUS(UART_TTL_BASE);


while(!(status&0x40))
   status=IORD_ALTERA_AVALON_UART_STATUS(UART_TTL_BASE);//等待发送完成
复制代码
IOWR_ALTERA_AVALON_UART_TXDATA(UART_TTL_BASE,data);
}
void uart_send_n(unsigned char *ptr,unsigned char n)


//uart发送多个字节


{{ for(;n>0;n++)
    uart_send(*ptr);
    ptr++;
}
}
void uart_stm32_init()//串口中断初始化
{ i2=0;
IOWR_ALTERA_AVALON_UART_CONTROL(UART_TTL_BASE,0x80);



//接受中断使能

IOWR_ALTERA_AVALON_UART_STATUS(UART_TTL_BASE,0X00);//清状态标志  
alt_u16 control11;   
control11=ALTERA_AVALON_UART_CONTROL_RRDY_MSK | ALTERA_AVALON_UART_CONTROL_E_MSK;
IOWR_ALTERA_AVALON_UART_CONTROL(UART_TTL_BASE, control11);
IOWR_ALTERA_AVALON_UART_DIVISOR(UART_422_BASE, 10416);
alt_irq_register(UART_TTL_IRQ,0,uart_stm32_isr);注册串口中断服务程序
}
void stm32_command_switch(void)



//对读取到的数据进行处理

{

High=read_temp[1];
Low=read_temp[2];
Temp=(Low+High*256)/100;
test1=read_temp[3];
TEC_Flag=test1;
}
STM32


//向FPGA发送数据


void usart_sendstring(unsigned intdata1,unsigned int data2,unsigned int data3,unsigned int data4)

{ uart_init(115200);  //串口初始化为115200

USART_SendData(USART1,data1);//向串口1发送数据头
                    while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);//等待发送结束
         USART_SendData(USART1, data2);//向串口1发送温度高八位
                    while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);//等待发送结束
                USART_SendData(USART1, data3);//向串口1发送温度低八位
                       while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);//等待发送结束
                USART_SendData(USART1, TEC_Flag);//向串口1发送TEC工作状态//test
                       while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);//等待发送结束
         USART_SendData(USART1, 0xDD);//向串口1发送TEC工作状态//test
                       while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);//等待发送结束


相关文章
|
7月前
|
数据格式 异构计算
|
7月前
|
人工智能 物联网 5G
|
5月前
stm32f407探索者开发板(十七)——串口寄存器库函数配置方法
stm32f407探索者开发板(十七)——串口寄存器库函数配置方法
767 0
|
5月前
STM32CubeMX 串口收发一帧数据
STM32CubeMX 串口收发一帧数据
64 9
|
5月前
|
芯片
STM32CubeMX 串口数据收发
STM32CubeMX 串口数据收发
178 2
|
5月前
|
监控
stm32f407探索者开发板(十八)——串口通信实验讲解(USART_RX_STA流程图详解)
stm32f407探索者开发板(十八)——串口通信实验讲解(USART_RX_STA流程图详解)
399 0
|
5月前
stm32f407探索者开发板(十六)——串行通信原理讲解-UART
stm32f407探索者开发板(十六)——串行通信原理讲解-UART
294 0
|
5月前
|
传感器 编解码 API
【STM32开发入门】温湿度监测系统实战:SPI LCD显示、HAL库应用、GPIO配置、UART中断接收、ADC采集与串口通信全解析
SPI(Serial Peripheral Interface)是一种同步串行通信接口,常用于微控制器与外围设备间的数据传输。SPI LCD是指使用SPI接口与微控制器通信的液晶显示屏。这类LCD通常具有较少的引脚(通常4个:MISO、MOSI、SCK和SS),因此在引脚资源有限的系统中非常有用。通过SPI协议,微控制器可以向LCD发送命令和数据,控制显示内容和模式。
198 0
|
7月前
STM32--SPI通信与W25Q64(2)
STM32--SPI通信与W25Q64(2)
103 0