3.1串口协议
eg:27 转换成二进制00011011
要注意通过串口发送十进制数字, 要从后往前写
空闲 | 起始位 | 1 | 1 | 0 | 1 | 1 | 0 | 0 | 0 | 停止 |
可以通过奇偶校验来判断是否出错,不足则在校验为进行补充
3.2UART模块使用方式
波特率:每秒钟最多传送多少位
3.4串口发送数据
1)TxE:发送数据寄存器空
TxE=1 空 TxE=0 非空
2)TC:发送完成
当TxE空且移位寄存器空 TC=1;反之=0
3)RxNE 接收数据寄存器非空
当RDR非空:RxNE=1;反之RxNE=0
ENABLE 使能 DISABLE 禁止
RESET-0 SET-1
#include "stm32f10x.h"
#include "stm32f10x_usart.h"
#include "stm32f10x_gpio.h"
#include "stm32f10x_rcc.h"
#include <stdio.h>
#include <delay.h>
void My_USART_SendBytes(USART_TypeDef *USARTx,uint8_t *pData,uint16_t Size);
void My_USART_Init(void);
int main(void)
{
Delay_Init();
My_USART_Init();
//printf("hello world");
while(1)
{
uint32_t currenTick = GetTick();
}
}
//
//@简介:通过串口发送多个字节
//@参数:USARTx:填写串口名称
//@参数:pDATA:要发送的字节
//@参数:Size:要发送字节的数量,单位是字节
//
void My_USART_SendBytes(USART_TypeDef *USARTx,uint8_t *pData,uint16_t Size)
{
for(uint32_t i=0;i<Size;i++){
//#1.等待发送数据寄存器为空
while(USART_GetFlagStatus(USARTx,USART_FLAG_TXE)==RESET);
//#2.写入发数据寄存器中
USART_SendData(USARTx,pData[i]);
}
//等待发送完成
while(USART_GetFlagStatus(USARTx,USART_FLAG_TC)==RESET);
}
//@简介:对USARET1进行初始化
// PB6-Tx PB7-Rx
// 11500 8 1 None 双向
//
void My_USART_Init(void)
{
//#1.初始化PB6 、PB7
GPIO_InitTypeDef GPIO_InitStruct;
//PA9 tx
// RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
// GPIO_InitStruct.GPIO_Pin=GPIO_Pin_9;
// GPIO_InitStruct.GPIO_Mode=GPIO_Mode_AF_PP;
// GPIO_InitStruct.GPIO_Speed=GPIO_Speed_10MHz;
// GPIO_Init(GPIOA,&GPIO_InitStruct);
//
// //PB10 rx
// GPIO_InitStruct.GPIO_Pin=GPIO_Pin_10;
// GPIO_InitStruct.GPIO_Mode=GPIO_Mode_IPU;
// GPIO_Init(GPIOA,&GPIO_InitStruct);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
GPIO_PinRemapConfig(GPIO_Remap_USART1,ENABLE);
//PB6
GPIO_InitStruct.GPIO_Pin=GPIO_Pin_6;
GPIO_InitStruct.GPIO_Mode=GPIO_Mode_AF_PP;
GPIO_InitStruct.GPIO_Speed=GPIO_Speed_10MHz;
GPIO_Init(GPIOB,&GPIO_InitStruct);
//PB7
GPIO_InitStruct.GPIO_Pin=GPIO_Pin_7;
GPIO_InitStruct.GPIO_Mode=GPIO_Mode_IPU;
GPIO_Init(GPIOB,&GPIO_InitStruct);
//#2.初始化USART1
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);//开启时钟
USART_InitTypeDef USART_InitStruct;
USART_InitStruct.USART_BaudRate =115200;//波特率115200
USART_InitStruct.USART_Mode=USART_Mode_Tx|USART_Mode_Rx;//双向
USART_InitStruct.USART_WordLength=USART_WordLength_8b;//8位数据位
USART_InitStruct.USART_StopBits=USART_StopBits_1;//停止位长度为1位
USART_InitStruct.USART_Parity=USART_Parity_No;//无校验
USART_Init(USART1,&USART_InitStruct);
}
int fputc(int ch,FILE *f)
{
//1.等待发送寄存器为空
while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)==RESET);
//2.发送
USART_SendData(USART1,(uint8_t)ch);
return ch;
}