STM32f103c8t6 串口 蓝牙控制LED

#include "stm32f10x.h"

/*
引脚说明:

PA2 USART_TX
PA3 USART_RX
 */

/// @brief 初始化串口2
/// @param baud
void usart_int(uint32_t baud)
{

    NVIC_InitTypeDef NVIC_InitStructure;
    GPIO_InitTypeDef GPIO_InitStructure;
    USART_InitTypeDef USART_InitStructure;

    // /* 初始化硬件时钟 */
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); /* GPIOA时钟 */
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE);

    /*复位串口2 */
    USART_DeInit(USART2);

    /* GPIO初始化 */
    /* USART2_TX   PA.2 */
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2; /* PA.2 */
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; /*复用推挽输出 */
    GPIO_Init(GPIOA, &GPIO_InitStructure);          /* 初始化PA2 */

    /* USART2_RX	  PA.3 */
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; /* 浮空输入 */
    GPIO_Init(GPIOA, &GPIO_InitStructure);                /* 初始化PA3 */

    USART_InitStructure.USART_BaudRate = baud;                                      /* 一般设置为9600; */
    USART_InitStructure.USART_WordLength = USART_WordLength_8b;                     /* 字长为8位数据格式 */
    USART_InitStructure.USART_StopBits = USART_StopBits_1;                          /* 一个停止位 */
    USART_InitStructure.USART_Parity = USART_Parity_No;                             /* 无奇偶校验位 */
    USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; /* 无硬件数据流控制 */
    USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;                 /* 收发模式 */
    USART_Init(USART2, &USART_InitStructure);                                       /* 初始化串口	2 */

    /*
     * 波特率设置
     * USART2->BRR=(pclk1*1000000)/(bound);// 波特率设置
     * USART2->CR1|=0X200C;         //1位停止,无校验位.
     */
    USART_Cmd(USART2, ENABLE); /* 使能串口 */

    /* 使能接收中断 */
    USART_ITConfig(USART2, USART_IT_RXNE, ENABLE);            /* 开启中断 */
    NVIC_InitStructure.NVIC_IRQChannel = USART2_IRQn;         // 中断通道
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2; /* 抢占优先级3 */
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;        /* 子优先级3 */
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;           /* IRQ通道使能 */
    NVIC_Init(&NVIC_InitStructure);                           /* 根据指定的参数初始化VIC寄存器 */
}

/* 定义用于存放消息的缓冲区 */
extern u8 data;

/// @brief 中断服务函数
/// @param
void USART2_IRQHandler(void)
{

    if (USART_GetITStatus(USART2, USART_IT_RXNE) != RESET) /* 接收到数据 */
    {

        /* 接收消息 */
        data = USART_ReceiveData(USART2);

        /* 判断灯光状态 */
        if (data == 'a')
            GPIO_ResetBits(GPIOA, GPIO_Pin_0);
        else if (data == 'A')
            GPIO_SetBits(GPIOA, GPIO_Pin_0);

        /* 消息回弹 */
        USART_SendData(USART2, data);

        while (USART_GetFlagStatus(USART2, USART_FLAG_TC) == RESET)
            ; //

        /* 清空标志位 */
        USART_ClearITPendingBit(USART2, USART_FLAG_RXNE);
    }
}

  • 7
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值