OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3059|回复: 5

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

[复制链接]

25

主题

59

帖子

0

精华

初级会员

Rank: 2

积分
149
金钱
149
注册时间
2019-4-23
在线时间
29 小时
发表于 2019-5-18 08:53:15 | 显示全部楼层 |阅读模式
1金钱
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);

  
  
  
   
    }
}

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

25

主题

59

帖子

0

精华

初级会员

Rank: 2

积分
149
金钱
149
注册时间
2019-4-23
在线时间
29 小时
 楼主| 发表于 2019-5-18 08:54:41 | 显示全部楼层
u8 KEY_Scan(u8 mode)
{
    static u8 key_up=1;     //按键松开标志
    if(mode==1)key_up=1;    //支持连按
    if(key_up&&(KEY0==0||KEY1==0||KEY2==0||WK_UP==1))
    {
        delay_ms(10);
        key_up=0;
        if(KEY0==0)       return KEY0_PRES;
        else if(KEY1==0)
                { led0pwmval=led0pwmval-50;
                return KEY1_PRES;
                }
        else if(KEY2==0)  return KEY2_PRES;       
        else if(WK_UP==1)
                { led0pwmval=led0pwmval+50;
                return WKUP_PRES;
                }
    }else if(KEY0==1&&KEY1==1&&KEY2==1&&WK_UP==0)key_up=1;
    return 0;   //无按键按下
}
这个是改的key.c里的
我想把led0pwmval 按一次减少或增加后的数值发到电脑上
回复

使用道具 举报

109

主题

5564

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
10572
金钱
10572
注册时间
2017-2-18
在线时间
1914 小时
发表于 2019-5-18 09:53:15 | 显示全部楼层
可以参考http://www.openedv.com/forum.php?mod=viewthread&tid=280856和原子的PWM例程(该例程通过控制占空比来控制灯的强弱)
回复

使用道具 举报

25

主题

59

帖子

0

精华

初级会员

Rank: 2

积分
149
金钱
149
注册时间
2019-4-23
在线时间
29 小时
 楼主| 发表于 2019-5-18 15:20:41 | 显示全部楼层
peng1554 发表于 2019-5-18 09:53
可以参考http://www.openedv.com/forum.php?mod=viewthread&tid=280856和原子的PWM例程(该例程通过控制占 ...

控制闪烁做到了 ,我想同时把led0pwmval的值串口发到电脑上
回复

使用道具 举报

17

主题

140

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
5889
金钱
5889
注册时间
2018-7-24
在线时间
2230 小时
发表于 2019-5-18 17:07:28 来自手机 | 显示全部楼层
寄存器版本里有个装载值,加减都是一个操作的那里,把那个值用串口发送就行了
回复

使用道具 举报

109

主题

5564

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
10572
金钱
10572
注册时间
2017-2-18
在线时间
1914 小时
发表于 2019-5-20 15:23:57 | 显示全部楼层
getgogo123 发表于 2019-5-18 15:20
控制闪烁做到了 ,我想同时把led0pwmval的值串口发到电脑上

调用printf函数打印led0pwmval的值到串口助手
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-12 18:00

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表