STM32f10x--uart串口配置

 一. 硬件设计

USART:同步和异步通信
UART:异步通信·
 SPI 、I2C为同步通信  UART为异步通信, usart为同步和异步通信。

二. 同步发送和异步发送的区别:

同步是指:发送方发出数据后,接收方发回响应以后,才可以发下一个数据包的通讯方式。  
异步是指:发送方发出数据后,不等接收方发回响应,可以接着发送下个数据包的通讯方。

三. 单工\半双工\全双工

1、单工数据传输只支持数据在一个方向上传输;

2、半双工数据传输允许数据在两个方向上传输,在某一时刻,只允许数据在一个方向上传输,它实际上是一种切换方向的单工通信;

3、全双工数据通信允许数据同时在两个方向上传输,所以全双工通信是两个单工通信方式的结合,它要求发送设备和接收设备都有独立的接收和发送能力。

I2C是半双工,SPI的全双工,uart是全双工。

四.USART结构体配置

USART初始化

typedef struct {

uint32_t USART BaudRate; // 波特率

uint16_t USART WordLength; // 字长

uint16 t USART StopBits; // 停止位

uint16 t USART Parity; // 校验位

uint16 t USART Mode; // USART 收发模式

uint16 t USART HardwareFlowControl; // 硬件流控制

uint16_t USART_Clock;            //同步时钟     配置是否打开

 uint16_t USART_CPOL;           //极性  配置串口空闲为低电平,高电平

uint16_t USART_CPHA;            //相位    配置选择边沿

 uint16_t USART_LastBit;         //最后一位时钟 配置使能还是关闭

} USART InitTypeDef;

1、配置有波特率  2400 9600 19200  115200

https://i-blog.csdnimg.cn/blog_migrate/464d4a6666dff651696625130a6729a3.png ​编辑 ​编辑

2、字长8   9

3、停止位有 0.5 、1、 1.5 、2

4、奇偶校验位

USART_Parity_No 奇偶失能

USART_Parity_Even 偶模式

 USART_Parity_Odd 奇模式

注意:奇偶校验一旦使能,在发送数据的 MSB 位插入经计算的奇偶位(字长 9 位时的第 9 位,字长 8 位 时的第 8 位)

5、usart收发模式

USART_Mode_Tx 发送使能

USART_Mode_Rx接收使能

6、硬件流

USART_HardwareFlowControl_None 硬件流控制失能

USART_HardwareFlowControl_RTS 发送请求 RTS 使能

USART_HardwareFlowControl_CTS 清除发送 CTS 使能 USART_HardwareFlowControl_RTS_CTS RTS 和 CTS 使能

五.代码

//初始化
void usar_Init(void)
{
	 USART_InitTypeDef Usar_Init;
	GPIO_InitTypeDef Gpio_Initstruct;
	NVIC_InitTypeDef	Nvic_Init;
  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2 );
 
	RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOA,  ENABLE);//引脚
	 RCC_APB2PeriphClockCmd( RCC_APB2Periph_AFIO,  ENABLE);//引脚复用
	 RCC_APB2PeriphClockCmd( RCC_APB2Periph_USART1,  ENABLE);//串口
	
  //配置TX输出
	Gpio_Initstruct.GPIO_Mode=GPIO_Mode_Out_PP;
	Gpio_Initstruct.GPIO_Pin=GPIO_Pin_9;
	Gpio_Initstruct.GPIO_Speed=GPIO_Speed_10MHz;
	GPIO_Init( GPIOA,  &Gpio_Initstruct);
	//配置RX输入
	Gpio_Initstruct.GPIO_Mode=GPIO_Mode_IN_FLOATING;
	Gpio_Initstruct.GPIO_Pin=GPIO_Pin_10;
	GPIO_Init( GPIOA,  &Gpio_Initstruct);
	//配置串口
	Usar_Init.USART_BaudRate=115200;
	Usar_Init.USART_HardwareFlowControl=USART_HardwareFlowControl_None;
	Usar_Init.USART_Mode=USART_Mode_Rx|USART_Mode_Tx;
	Usar_Init.USART_Parity=USART_Parity_No;
	Usar_Init.USART_StopBits=USART_StopBits_1;
	Usar_Init.USART_WordLength=USART_WordLength_8b;
	USART_Init( USART1, &Usar_Init);
	 USART_ITConfig(USART1,USART_IT_RXNE,  ENABLE);

	USART_Cmd( USART1,  ENABLE);
	//配置中断
	Nvic_Init.NVIC_IRQChannel                  =USART1_IRQn;
	Nvic_Init.NVIC_IRQChannelCmd                =ENABLE;
	Nvic_Init.NVIC_IRQChannelPreemptionPriority =1;
	Nvic_Init.NVIC_IRQChannelSubPriority         =1;
	NVIC_Init(&Nvic_Init);


}
//发送一个字符
void USARTSendDataByte(USART_TypeDef* USARTx, uint16_t Data)
{
	
	 USART_SendData( USART1,  Data); //发送一个数据到USART
	 while(USART_GetFlagStatus( USARTx,  USART_FLAG_TXE)==RESET);//等待发送数据寄存器为空
}
//发送一个字串
void USARTSendstr(USART_TypeDef* USARTx, char *str)
{
	uint16_t i =0;
	do{
		 USARTSendDataByte( USARTx, *(str+i));
					i++;
		
	  }
	while( *(str+i)!='\0');//*(str+i)!='\0'字符串标志位是否等于'\0'
		while(USART_GetFlagStatus( USARTx, USART_FLAG_TC)==RESET);//TC发送完标志位

	 


}

---------------------------------------------------------------------------------------------------------------------------------

​引用资料:《STM32F1xx中文参考手册》 《普中STM32F1xx开发攻略_V3.0--标准库版》

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值