假设我用PWM控制灯的强弱,怎么同时把数字从串口发到电脑上

2019-07-20 01:49发布

u16 len;
u16 led0pwmval=100;
u8 rdata[200];
TIM_HandleTypeDef TIM3_Handler;        
TIM_OC_InitTypeDef TIM3_CH4Handler;
void TIM3_PWM_Init(u16 arr,u16 psc)
{
    TIM3_Handler.Instance=TIM3;           
    TIM3_Handler.Init.Prescaler=psc;      
    TIM3_Handler.Init.CounterMode=TIM_COUNTERMODE_UP;
    TIM3_Handler.Init.Period=arr;         
    TIM3_Handler.Init.ClockDivision=TIM_CLOCKDIVISION_DIV1;
    HAL_TIM_PWM_Init(&TIM3_Handler);      
   
    TIM3_CH4Handler.OCMode=TIM_OCMODE_PWM1;
    TIM3_CH4Handler.Pulse=arr/2;            
                                          
    TIM3_CH4Handler.OCPolarity=TIM_OCPOLARITY_LOW;
    HAL_TIM_PWM_ConfigChannel(&TIM3_Handler,&TIM3_CH4Handler,TIM_CHANNEL_4);
    HAL_TIM_PWM_Start(&TIM3_Handler,TIM_CHANNEL_4);
}

void HAL_TIM_PWM_MspInit(TIM_HandleTypeDef *htim)
{
    GPIO_InitTypeDef GPIO_Initure;
__HAL_RCC_TIM3_CLK_ENABLE();   //使能定时器3
    __HAL_RCC_GPIOB_CLK_ENABLE();   //开启GPIOB时钟

    GPIO_Initure.Pin=GPIO_PIN_1;            //PB1
    GPIO_Initure.Mode=GPIO_MODE_AF_PP;   //复用推完输出
    GPIO_Initure.Pull=GPIO_PULLUP;          //上拉
    GPIO_Initure.Speed=GPIO_SPEED_HIGH;     //高速
GPIO_Initure.Alternate=GPIO_AF2_TIM3; //PB1复用为TIM3_CH4
    HAL_GPIO_Init(GPIOB,&GPIO_Initure);
}
//设置TIM通道4的占空比
//compare:比较值
void TIM_SetTIM3Compare4(u32 compare)
{
TIM3->CCR4=compare;
}
int main(void)
{
   
u8 key;

    Cache_Enable();                 //打开L1-Cache
    HAL_Init();            //初始化HAL库
    Stm32_Clock_Init(432,25,2,9);   //设置时钟,216Mhz
    delay_init(216);                //延时初始化
uart_init(115200);          //串口初始化
    LED_Init();                     //初始化LED
    KEY_Init();                     //按键初始化
    TIM3_PWM_Init(500-1,108-1);     //108M/108=1M的计数频率,自动重装载为500,那么PWM频率为1M/500=2kHZ

       while(1)
    {

  
       key=KEY_Scan(0);
  
  
   TIM_SetTIM3Compare4(led0pwmval);

   
  HAL_UART_Transmit(&UART1_Handler,rdata,sizeof(rdata),1000);

  
  
  
   
    }
}

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。