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);//等待发送结束