• STM32_USART



    USART_InitTypeDef USART_InitStruct;

    //system_stm32f4xx.c 316 8
    //stm32f4xx.h 123 25000000 8000000



    //1.打开对应时钟
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);

    //2.复用GPIO功能
    GPIO_PinAFConfig(GPIOA, GPIO_PinSource9, GPIO_AF_USART1);
    GPIO_PinAFConfig(GPIOA, GPIO_PinSource10, GPIO_AF_USART1);

    //3.UART配置
    调用USART_Init()
    void USART_Init(USART_TypeDef* USARTx, USART_InitTypeDef* USART_InitStruct)
    USARTx USART控制接口 取值范围 :USART1~6

    uint32_t USART_BaudRate;
    功能:配置波特率
    寄存器:BBR寄存器
    取值范围:115200

    uint16_t USART_WordLength;
    功能:配置字长
    寄存器:CR1寄存器 12位
    取值范围:USART_WordLength_8b  USART_WordLength_9b

    uint16_t USART_StopBits;
    功能:配置停止位
    寄存器:CR2 12 13寄存器
    取值范围:USART_StopBits_1  ..

    uint16_t USART_Parity;
    功能:奇偶校验

    寄存器:CR1 9 10

    取值范围:USART_Parity_No 无奇偶校出验位  USART_Parity_Even   USART_Parity_Odd

    uint16_t USART_Mode;
    功能:开启发送和接收

    寄存器:CR1 2 3

    取值范围:USART_Mode_Rx USART_Mode_Tx

    uint16_t USART_HardwareFlowControl;
    功能:控制流

    寄存器:CR3 8 9

    取值范围:USART_HardwareFlowControl_None

    代码示例:

    //实现透传 通过PC发送一个数据给开发板

    //开发板在接收到数据之后,返回给PC

    GPIO_InitTypeDef GPIO_InitStruct;
    USART_InitTypeDef USART_InitStruct;
    NVIC_InitTypeDef NVIC_InitStruct;
    //1.打开USART控制器时钟
    //RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE);
    RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);

    //PA9 PA10 配置成复用
    GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF;
    GPIO_InitStruct.GPIO_OType = GPIO_OType_PP;
    GPIO_InitStruct.GPIO_Pin = GPIO_Pin_2|GPIO_Pin_3;
    //GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_NOPULL;
    GPIO_InitStruct.GPIO_Speed = GPIO_Speed_100MHz;
    GPIO_Init(GPIOA, &GPIO_InitStruct);

    //选择复用关系
    GPIO_PinAFConfig(GPIOA,GPIO_PinSource2,GPIO_AF_USART2 );
    GPIO_PinAFConfig(GPIOA,GPIO_PinSource3,GPIO_AF_USART2 );

    ------配置USART-------

    USART_InitStruct.USART_BaudRate = 115200;
    USART_InitStruct.USART_HardwareFlowControl = USART_HardwareFlowControl_None;

    //发送和接收都需要打开

    USART_InitStruct.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
    USART_InitStruct.USART_Parity = USART_Parity_No;
    USART_InitStruct.USART_StopBits = USART_StopBits_1;
    USART_InitStruct.USART_WordLength = USART_WordLength_8b;
    USART_Init(USART2, &USART_InitStruct);

    初始化串口, 对于接收,接收端不知道数据什么时候来,需要打开中断。

    /*
    USART_ITConfig
    void USART_ITConfig(USART_TypeDef* USARTx, uint16_t USART_IT, FunctionalState NewState)

    三个参数
    USARTx 1~6

    中断类型:USART_IT_RENX

    NewState ENABLE DISABLE

    */

    USART_ITConfig(USART2, USART_IT_RXNE, ENABLE);

    //NVIC管理器
    NVIC_InitStruct.NVIC_IRQChannel = USART2_IRQn;
    NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE;
    NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 0x0;
    NVIC_InitStruct.NVIC_IRQChannelSubPriority = 0x0;
    NVIC_Init(&NVIC_InitStruct);

    //USART2串口使能
    USART_Cmd(USART2, ENABLE);

    USART操作

    /*
    void USART_SendData(USART_TypeDef* USARTx, uint16_t Data);
    uint16_t USART_ReceiveData(USART_TypeDef* USARTx);
    */


    void USART2_IRQHandler(void)
    {
    u8 data =0;
    //1.判断中断类型
    /*
    ITStatus USART_GetITStatus(USART_TypeDef* USARTx, uint16_t USART_IT);
    void USART_ClearITPendingBit(USART_TypeDef* USARTx, uint16_t USART_IT);

    */

    //SR RXNE只要DR 有数据,该位会自动置1
    //当读取该位时候,会自动清零
    if(USART_GetITStatus(USART2,USART_IT_RXNE) == SET)
    {
    data = USART_ReceiveData(USART2);

    USART_SendData(USART2, data);
    switch(data )
    {
    case '0':
    LED1 = 0;
    break;
    case '1':
    LED1 = 1;
    break;
    case '2':
    BEEP = 1;
    break;
    case '3':
    BEEP = 0;
    break;
    case '4':
    LED2 = 0;
    break;
    case '5':
    LED2 = 1;
    break;
    case '6':
    LED1 = 1;
    LED2 = 1;
    BEEP = 0;
    break;
    default:
    break;
    }

    //清空状态
    USART_ClearITPendingBit(USART2,USART_IT_RXNE);
    }

  • 相关阅读:
    针对大数据量 高并发量网站的解决方案
    session cookie 在用户登录中的使用
    彻底弄懂HTTP缓存机制及原理
    cookie 和session 的区别详解
    常见的浏览器兼容性问题
    内容分发网络(CDN)
    表现与数据分离、Web语义化
    关于bootstrap样式重写,无法覆盖的问题
    判断一个字符串中出现次数最多的字符
    [译]SQL Passion Week 10: 计划缓存
  • 原文地址:https://www.cnblogs.com/baoshulin/p/6159802.html
Copyright © 2020-2023  润新知