STM32f4————串口通信实验代码(02)
/*******************************************************/
介绍完了这两个函数,我们回到main.c,对于main.c前面引入的头文件为了篇幅考虑,我们后面的实验不再列出,详情请参考我们实验代码即可。主函数代码如下:
int main(void)
{
u8 t,len; u16 times=0;
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置系统中断优先级分组 2
delay_init(168); //延时初始化
uart_init(115200); //串口初始化波特率为 115200
LED_Init(); //初始化与 LED连接的硬件接口
LED0=0; //先点亮红灯
while(1)
{
if(USART_RX_STA&0x8000)
{
len=USART_RX_STA&0x3fff;//得到此次接收到的数据长度
printf("\r\n您发送的消息为:\r\n");
for(t=0;t<len;t++)
{
USART1->DR=USART_RX_BUF[t];
while((USART1->SR&0X40)==0);//等待发送结束
}
printf("\r\n\r\n");//插入换行
USART_RX_STA=0;
}else
{
times++;
if(times%5000==0)
{ printf("\r\nALIENTEK 探索者 STM32F407 开发板 串口实验\r\n");
printf("正点原子@ALIENTEK\r\n\r\n\r\n");
}
if(times%200==0)printf("请输入数据,以回车键结束\r\n");
if(times%30==0)LED0=!LED0;//闪烁 LED,提示系统正在运行.
delay_ms(10);
}
}
}
这段代码比较简单,开头部分我们先调用 NVIC_PriorityGroupConfig 函数设置系统的中断优先级分组。然后调用 uart_init 函数,设置波特率为 115200。接下来我们重点看下以下两句:
USART_SendData(USART1, USART_RX_BUF[t]); //向串口1 发送数据
while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);
第一句,其实就是发送一个字节到串口。第二句呢,就是我们在我们发送一个数据到串口之后,要检测这个数据是否已经被发送完成了。USART_FLAG_TC 是宏定义的数据发送完成标识符。
其他的代码比较简单,我们执行编译之后可以看到,没有任何错误和警告,下面我们可以开始下载验证了。
/*******************************************************/
【立创商城】STM32F103CBT6 托盘 https://item.szlcsc.com/8796.html |