发送一个数据
#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);
}