STM32F103C8T6_7:USART

一、

1.1USART引脚GPIO设置 

 1.2USART发送接收数据格式

 

void USART1_Init(uint32_t bound)
{
//定义结构体:GPIO结构体、USART结构体、NVIC结构体
    GPIO_InitTypeDef GPIO_InitStructure;
    USART_InitTypeDef USART_InitStructure;
    NVIC_InitTypeDef NVIC_InitStructure;

//开启外设时钟
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);

//配置USART1的RX和TX端口引脚(查看复用功能重映射)
//TX
    GPIO_InitStructure.GPIO_Pin=GPIO_Pin_9;
    GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50Mhz;
    GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;
    GPIO_Init(GPIOA,&GPIO_InitStructure);
//RX
    GPIO_InitStructure.GPIO_Pin=GPIO_Pin_10;
//输入不需要配置引脚速度   GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50Mhz;
    GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;
    GPIO_Init(GPIOA,&GPIO_InitStructure);  

//设置USART结构体
//设置波特率
    USART_InitStructure.USART_BaudRate=bound;  
//设置字长
    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模式
    USART_InitStructure.USART_Mode=USART_Mode_Rx|USART_Mode_Tx;
//选择USART1并根据上述参数初始化
    USART_Init(USART1,&USART_InitStructure);
//开启USART1外设
    USART_Cmd(USART1,ENABLE);
//清除传输完成标志
    USART_ClearFlag(USART1,USART_FLAG_TC);
//开启接收数据寄存器不空中断
    USART_ITConfig(USART1,USART_IT_RXNE,ENABLE);

//USART1中断优先级配置
//中断优先级分组:2位抢占优先级,2位子优先级
    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); 
//中断通道
    NVIC_InitStructure.NVIC_IRQChannel=USART1_IRQn;
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=3;
    NVIC_InitStructure.NVIC_IRQChannelSubPriority=3;
    NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
    NVIC_Init(&NVIC_InitStructure);
}

//USART1中断服务函数
void USART1_IRQHandler(void)
{
    uint8_t r;
//接收到数据
    if(USART_GetITStatus(USART1,USART_IT_RXNE)!=RESET)
        {
//读取数据
            r=USART_ReceiveData(USART1);
//发送数据
            USART_SendData(USART1,r);
//发送结束跳出循环
            while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);
        }
//清除传输完成标志
    USART_ClearFlag(USART1,USART_FLAG_TC);
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值