stm32下串口开发–发送字符串调试数据

不得不说串口是个好东西,协议简单,使用方便.是下位机与上位机通讯一个很好的选择.今天就讲讲在stm32下的串口调试.

开发环境: UBUNTU LINUX 13.10  ARM GCC(具体搭建请见我前面的博客文章)

芯片:  stm32f103zet6

库:  官方库

个人原创,版权所以,转载请注明原文出处:

http://www.embbnux.com/2014/03/20/stm32_send_string_on_usart/

一  配置串口,打开串口

初始化程序:


//初始化 USAR1
void usart_init( void ){
 GPIO_InitTypeDef GPIO_InitStructure;
 USART_InitTypeDef USART_InitStructure;
 //PA9作为US1的TX端,打开复用,负责发送数据
 //GPIO_StructInit(&GPIO_InitStructure);
 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
 //GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
 GPIO_Init(GPIOA , &GPIO_InitStructure);

 //PA10作为US1的RX端,负责接收数据
 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
 GPIO_Init(GPIOA, &GPIO_InitStructure);

USART_InitStructure.USART_BaudRate = BAUD;
 USART_InitStructure.USART_WordLength = USART_WordLength_8b;
 USART_InitStructure.USART_StopBits = USART_StopBits_1;
 USART_InitStructure.USART_Parity = USART_Parity_No;
 USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
 USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
 USART_Init(USART1,&USART_InitStructure) ;
 USART_Cmd(USART1, ENABLE);
}

使用USART1,主要是配置波特率,GPIO等,记得要打开串口时钟;

二  发送接收数据

发送单字节数据


//发送
void usart_transmit( unsigned char data ){
 USART_ClearFlag(USART1,USART_FLAG_TC);
 USART_SendData(USART1,data);
 while(USART_GetFlagStatus(USART1,USART_FLAG_TC)==RESET);
 USART_ClearFlag(USART1,USART_FLAG_TC);

}

特别要说一下这里的while等待,这里是等待一个字节发送成功.如果没有这句的话,在连续发送过个字节,也就是字符串的时候,会发生丢失数据.

发送字符串:


void usart_send_string(char *str){
 while(*str)
 {
 usart_transmit(*str) ;
 str++;
 }
}

接收数据:

这里比较简单的配置了一下,其实应该用中断的:


//接收信息
unsigned char usart_receive( void ){
 unsigned char data;
 data =USART_ReceiveData(USART1);
 return data;
}

串口配合sprintf使用,可以很好的打印整型数浮点数等,但是在我现在这个环境下用sprintf编译不通过,挺奇怪的,我用avr-gcc倒是好好的.

《stm32下串口开发–发送字符串调试数据》有1个想法

  1. 楼主,问下你在你这个工程上用起sprintf或者是printf了吗?
    我现在是编译通过,通过重写_write函数,printf字符串可以,但是printf(“%d”, i)类似这种带%d %s 的输出,程序就卡死了,我想请教下楼主的使用情况,多谢!

发表评论

电子邮件地址不会被公开。 必填项已用*标注

Time limit is exhausted. Please reload the CAPTCHA.