Bootstrap

STM32实战篇:使用USART发送/接收数据

发送一个数据

#include "stm32f10x.h"                  // Device header

int main()
{
	//
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);//开启GPIOB时钟
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE); //开启AFIO时钟
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE); //开启USART时钟
	
	//GPIO初始化:Rx和Tx
	GPIO_InitTypeDef GPIO_InitStructO;
	GPIO_InitStructO.GPIO_Pin=GPIO_Pin_6;
	GPIO_InitStructO.GPIO_Speed=GPIO_Speed_10MHz;
	GPIO_InitStructO.GPIO_Mode=GPIO_Mode_AF_PP;
	GPIO_Init(GPIOB, &GPIO_InitStructO);
	
	GPIO_InitTypeDef GPIO_InitStructI;
	GPIO_InitStructI.GPIO_Pin=GPIO_Pin_7;
	GPIO_InitStructI.GPIO_Speed=GPIO_Speed_10MHz;
	GPIO_InitStructI.GPIO_Mode=GPIO_Mode_IPU;
	GPIO_Init(GPIOB, &GPIO_InitStructI);
	
	//重映射USART1的Tx和Rx
	GPIO_PinRemapConfig(GPIO_Remap_USART1, ENABLE);
	
	//初始化USART1
	USART_InitTypeDef USART_InitStruct;
	USART_InitStruct.USART_BaudRate=9600;
	USART_InitStruct.USART_WordLength=USART_WordLength_8b;
	USART_InitStruct.USART_StopBits=USART_StopBits_1;
	USART_InitStruct.USART_Parity=USART_Parity_No;
	USART_InitStruct.USART_Mode=USART_Mode_Tx|USART_Mode_Rx;
	USART_InitStruct.USART_HardwareFlowControl=USART_HardwareFlowControl_None;
	
	USART_Init(USART1, &USART_InitStruct);
	
	//闭合USART1的总开关
	USART_Cmd(USART1, ENABLE);

	while(1)
    {
        while(USART_GetITStatus(USART1, USART_FLAG_TXE)==RESET);//等待TDR寄存器清空
	    USART_SendData(USART1, 0x5a);//写入要发送的数据
	    while(USART_GetITStatus(USART1, USART_FLAG_TC)==RESET);//等待数据发送完成
    }
}

连续发送数据

while(1)
{
	uint8_t a[]={0,1,2,3,4,5};
	uint32_t i;
	
	for(i=0;i<sizeof(a)/sizeof(uint8_t);i++){
		while(USART_GetITStatus(USART1, USART_FLAG_TXE)==RESET);//等待TDR寄存器清空
		USART_SendData(USART1, a[i]);//写入要发送的数据
	}
	while(USART_GetITStatus(USART1, USART_FLAG_TC)==RESET);//等待数据发送完成
}


发送字符

while(1)
{
  while(USART_GetITStatus(USART1, USART_FLAG_TXE)==RESET);//等待TDR寄存器清空
  USART_SendData(USART1, 'a');//写入要发送的数据
  while(USART_GetITStatus(USART1, USART_FLAG_TC)==RESET);//等待数据发送完成
}

在发送字符时也可以直接使用其对应的ASCLL码,例如: USART_SendData(USART1, 0x61);


发送字符串

while(1)
{
    const char*str="Hello World";
    uint32_t i;
    for(i=0;i<strlen(str);i++)
    {
	    while(USART_GetITStatus(USART1, USART_FLAG_TXE)==RESET);//等待TDR寄存器清空
	    USART_SendData(USART1, str[i]);//写入要发送的数据
    }
    while(USART_GetITStatus(USART1, USART_FLAG_TC)==RESET);//等待数据发送完成

}

接收数据

while(1)
{
    while(USART_GetITStatus(USART1, USART_FLAG_RXNE)==RESET);
    char c=USART_ReceiveData(USART1);
}

;