zoukankan      html  css  js  c++  java
  • 2019年9月12日星期四(STM32 pwm 串口 )

    .定时器

    1.PWM

       

      PWM脉冲宽度调制(Pulse Width Modulation)是通过微处理器的数字输出(高低电平)来对模拟电路进行控制的一种非常有效的技术,在测量,通信和功率控制等领域被广泛使用

        占空比 - 在规定时间内,有效电平所占的比例

    2.stm32通用定时器有PWM功能

        通用定时器可以和GPIO口配合,通过GPIO输出PWM波形,定时器的周期就是PWM波的周期,PWM波的电平改变时间通过定时器的比较计数器来决定

        PWM波的波形由周期(定时器周期),极性(配置),占空比(比较计数器)共同决定

        PWM波是通过GPIO输出,属于GPIO的复用输出功能,需要配置GPIO的复用映射(选择对应的复用功能)

    3.GPIO的功能复用

        参考手册中所有的GPIO都与16个复用功能,通过寄存器配置对应的复用功能,但是实际上芯片每个IO口的复用功能没有这么多,要根据原理图(具体芯片手册)来查询每隔IO口有哪些复用功能,根据查询结果去配置寄存器

    4.PWM定时器编程方法(LED1呼吸灯为例)

    1)开启定时器14GPIOF的时钟

        RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM14, ENABLE);

        ....

    2)初始化PF9为复用输出功能

        GPIO_Init();

        //GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF;//复用模式

    3)将PF9复用映射到TIM14

        GPIO_PinAFConfig(GPIOF, GPIO_PinSource9, GPIO_AF_TIM14);

    4)初始化定时器

        TIM_TimeBaseInit();

    5)初始化定时器比较参数

        void TIM_OC1Init(TIM_TypeDef* TIMx, TIM_OCInitTypeDef* TIM_OCInitStruct)

        参数:

            TIMx - 哪个定时器

            TIM_OCInitStruct - 初始化结构

      typedef struct
    {
      uint16_t TIM_OCMode;        /*!< 
    输出模式 PWM1/PWM2(和极性,定时器计数方式共同决定波形高电平顺序)*/

      uint16_t TIM_OutputState;   /*!< 输出状态使能 TIM_OutputState_Enable @ref TIM_Output_Compare_State */

      uint32_t TIM_Pulse;         /*!< 初始比较计数值 between 0x0000 and 0xFFFF */

      uint16_t TIM_OCPolarity;    /*!< 极性电平 TIM_OCPolarity_Low @ref TIM_Output_Compare_Polarity */
    } TIM_OCInitTypeDef;

    6)使能预装在寄存器

        TIM_OC1PreloadConfig(TIM14, TIM_OCPreload_Enable);

    7)使能自动重装载允许位

        TIM_ARRPreloadConfig(TIM14, ENABLE);

    8)使能定时器

        TIM_Cmd(...);


    9)修改比较值寄存器(CCRx),实现占空比调节

        void TIM_SetCompare1(TIM_TypeDef* TIMx, uint32_t Compare1)

        参数:

            TIMx - 哪个定时器

            Compare1 - 新的比较值

    .串口编程

    1.通信的基本概念

    1)并行通信和串行通信

    并行通信利用多条数据线将多位二进制数据同时传送

     

    串行通信利用一根数据线一次传输一位二进制位(比特位)

      

    2)通信方式

        单工 ----- 数据只能沿着一个方向传输(单向传输)

        半双工 ---- 数据可以双向传输,但是不可以同时进行(某个时间点只能单向传输)

        全双工 ---- 在同一个时间点数据可以双向传输

        

    3)数据帧(协议)

        

    4)串口交叉连接

     

    5)串口使用波特率(bps)表示传输速率 ------ 单位时间内传输的比特位数

    2.stm32串口

        串行,全双工

        数据线有两根: TXD(发送) RXD(接收)

    1)原理图

     

        最终连接到了CPU的PA9 PA10

    2)查看stm32的芯片手册

    特性:

         

     

     

     

    3.串口配置的编程方法

    1)使能GPIOA,串口1的时钟

        RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);

        ...

    2)初始化GPIO为复用功能

        GPIO_Init(...)

    3)将PA9 PA10映射为串口功能

        GPIO_PinAFConfig(GPIOA, GPIO_PinSource9, .......);

        GPIO_PinAFConfig(GPIOA, GPIO_PinSource10, .......);

    4    

        void USART_Init(USART_TypeDef* USARTx, USART_InitTypeDef* USART_InitStruct)

        参数:

            USARTx - 哪个串口

            USART_InitStruct - 初始化结构体

      typedef struct
    {
      uint32_t USART_BaudRate;            /*!<
    波特率115200 */

      uint16_t USART_WordLength;          /*!< 数据位长度 USART_WordLength_8b @ref USART_Word_Length */

      uint16_t USART_StopBits;            /*!< 停止位长度  USART_StopBits_1 @ref USART_Stop_Bits */

      uint16_t USART_Parity;              /*!< 校验方式 USART_Parity_No @ref USART_Parity*/
     
      uint16_t USART_Mode;                /*!< 
    传输方式 USART_Mode_Rx|USART_Mode_Tx @ref USART_Mode */

      uint16_t USART_HardwareFlowControl; /*!< 硬件流控制 USART_HardwareFlowControl_None @ref USART_Hardware_Flow_Control */
    } USART_InitTypeDef;

    5)如果需要使用串口中断,初始化中断源和NVIC

         USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);;//接收中断

         NVIC_Init(...);

    6)使能串口

        USART_Cmd(USART1,ENABLE);


     7)发送和接收数据 ---------- (轮询中断 DMA)

    轮询发送:

    void usart1_putc(u8 data)

    {

        //等待上一个数据是否发送完成

         while(USART_GetFlagStatus(USART1,USART_FLAG_TC)==RESET);

        // 发送数据

        USART_SendData(USART1,data);

    }

  • 相关阅读:
    网络知识学习系列(一)
    C# 开发系列(三)
    angularJS 系列(三)- 自定义 Service
    添加百度地图,显示定位
    angularJS 系列(二)——理解指令 understanding directives
    angularJS 系列(一)
    hbuilder 手机app开发系列(一)
    vue + 百度地图api
    百度地图api
    canvas的api
  • 原文地址:https://www.cnblogs.com/zjlbk/p/11529562.html
Copyright © 2011-2022 走看看