STM32系列 PWM输出

 

#include "led.h"
#include "delay.h"
#include "key.h"
#include "sys.h"
#include "usart.h"
#include "timer.h"
//ALIENTEK战舰STM32开发板实验9
//PWM输出实验  
//技术支持:www.openedv.com
//广州市星翼电子科技有限公司 void sendback(void)
{unsigned char t;for(t=0;t<myusart.recount;t++){USART_SendData(USART1, myusart.rcbuf[t]);//向串口1发送数据while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);//等待发送结束
        }    
}
void Com_Handle(void)
{unsigned long long arr=0;unsigned int psc=0;//数据格式判断if((myusart.rcbuf[0]!= 0xaa) || (myusart.rcbuf[myusart.recount-1]!=0xff))//头码是否为0xaa,结束码是否为0xff
    {return;}else{//如何处理四个数据,四字节转成一个数//00  00   A0  28arr=(myusart.rcbuf[1]<<24)+(myusart.rcbuf[2]<<16)+ (myusart.rcbuf[3]<<8) + myusart.rcbuf[4];psc=5000;         //占空比50%=5000/10000;
        set_pwm1(arr,psc);//是否需要回复,发什么回复什么
        sendback();}}int main(void)
{        delay_init();             //延时函数初始化      NVIC_Configuration();      //设置NVIC中断分组2:2位抢占优先级,2位响应优先级uart_init(115200);     //串口初始化为115200LED_Init();                 //LED端口初始化
//    TIM3_PWM_Init(900-1,0);     //不分频。PWM频率=72000k/900=80KhzTIM3_PWM_Init(3-1,250-1);     //
    TIM2_Int_Init(999,71); //1mswhile(1){if(myusart.reflag>0){Com_Handle();//收到什么回复什么;    myusart.recount=0;myusart.reflag=0;}}     
}
main
//TIM3 PWM部分初始化 
//PWM输出初始化
//arr:自动重装值
//psc:时钟预分频数
void TIM3_PWM_Init(u16 arr,u16 psc)
{  GPIO_InitTypeDef GPIO_InitStructure;TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;TIM_OCInitTypeDef  TIM_OCInitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE); // 使能GPIOB时钟
 RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);// 配置IO模式GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;// 复用推挽复用输出GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;GPIO_Init(GPIOA, &GPIO_InitStructure);            //初始化TIM3的计数模式、分频值、重装载值等TIM_TimeBaseStructure.TIM_Period = arr;  //ARRTIM_TimeBaseStructure.TIM_Prescaler = psc; //PSCTIM_TimeBaseStructure.TIM_ClockDivision = 0;TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;// 向上计数模式 TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);/*TIM3_CH1输出占空比为20%的PWM波的定时配置*/TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;// 选择定时器模式:TIM脉冲宽度调制模式1TIM_OCInitStructure.TIM_OutputState =TIM_OutputState_Enable;// 比较输出使能TIM_OCInitStructure.TIM_Pulse = (arr+1)/2;  //CCRTIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;// 输出极性:TIM输出比较极性高TIM_OC1Init(TIM3, &TIM_OCInitStructure);TIM_OC1PreloadConfig(TIM3, TIM_OCPreload_Enable);// 使能TIM3在OC1上的预装载寄存器
 TIM_Cmd(TIM3, ENABLE);//使能TIM3时钟
}void set_pwm1(unsigned long long arr,unsigned int psc)//例如set_pwm1(41000,1000);// 这样就是41KHZ,10%  1000/10000=10%
{double T_ARR,DPwm_CCR2;unsigned int PWM_Per=0,TIM1_CCR1=0;//        T_ARR=(double)72000000/arr; T_ARR=(double)288000/arr; DPwm_CCR2=(double)(T_ARR * psc)/10000;T_ARR=T_ARR+0.5;//四舍五入算法DPwm_CCR2=DPwm_CCR2+0.5;//四舍五入算法//    PWM_Config_step((u16)T_ARR, (u16)DPwm_CCR2, 1);PWM_Per = (unsigned int)T_ARR;TIM1_CCR1 =DPwm_CCR2;TIM_SetAutoreload(TIM3,PWM_Per-1);TIM_SetCompare1(TIM3,TIM1_CCR1-1);}
TIM3_PWM_Init

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/719894.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

为什么想做副业???还不是因为穷

为什么那一刻突然想做副业???: 1、没有门路,没有渠道,害怕被骗,担心赚不到钱。 2、免费的怕被骗,要钱的却直接支付了,真豪爽(结果都没有赚到本钱) 我听到最搞笑的一句是:别人在哪个平台能找到我的店铺呢。。。不行动钱自己送上门???那为什么有些人想做却做不来呢…

node.js,在Azure Cosmos DB中批量删除数据

1.删除数据操作: 对于数据,不做逻辑删除,仅作标记删除,即将数据的isDelete属性置为true,因此删除数据实际上是修改数据。 某个item如图const item = await container.item(id, partitionKey).read() // 根据id和partitionKey读取数据 let Item = item.resource //获取数据…

配置枚举处理器

在application.yaml文件中添加配置: mybatis-plus:configuration:default-enum-type-handler: com.baomidou.mybatisplus.core.handlers.MybatisEnumTypeHandler 测试 @Test void testService() {List<User> list = userService.list();list.forEach(System.out::printl…

Error running ‘Application’Command line is too long

按照网上的说法 需要一个一个修改测试方法 或者 应用,比较麻烦 !!!!! 这里介绍一个一次设置的方法 第一步 2第二步3第三部 把这两个都修改下 应该就OK了

免费的项目管理系统哪个好?2024年值得关注的6大项目管理系统

对于预算有限的小企业和创业公司来说,免费的项目管理系统不仅可以帮助节省成本,还能提高工作效率。本文将分享2024年值得关注的6大项目管理系统:PingCode、Worktile、Asana、Trello、Jira、Monday.com。对于预算有限的小企业和创业公司来说,免费的项目管理系统不仅可以帮助…

java什么时候声明static方法

声明为static的方法有以下典型使用场景工具方法(Utility Methods):当你有一个方法不需访问对象状态,即不需要访问类的非静态成员变量,那么这个方法可以声明为static。这样,你无需创建类的实例就可以通过类名直接调用该方法。很多工具类如Math, Arrays, Collections中的方…

2024年9大主流提效个人项目管理工具分享

本文将介绍市场上几款受欢迎的个人项目管理软件,帮助你选择适合自己需求的最佳工具。本文将分享9大主流提效个人项目管理工具:PingCode、Worktile、Smartsheet、Celoxis、Wrike、QuickBase、Miro、FigJam、Nifty。个人项目管理软件作为提高生产力、组织任务和跟踪进度的强大工…

璞华科技获《数据产品登记证书》,璞华易表入数据资产运营市场

根据地方政策、深入地方市场、为地方客户提供专业的数据资产入表、数据资产运营管理服务!随着数字经济时代的飞速发展,数据要素在社会经济中的地位也变得越来越重要,成为超越传统土地、劳动力、技术和资金的新型关键资源,被誉为“第五要素”。这一变化不仅凸显了数据在当今…

进制转换

void decToBinary(int decimal) {int binary[32];int cnt = 0;while (decimal > 0){binary[cnt] = decimal % 2; // 取模放在低位decimal = decimal / 2; // 更新参数cnt++;}printf("Binary equivalent: ");for (int i = cnt - 1; i >= 0; i--) // 逆向输出…

Linux 提权-内核利用

本文通过 Google 翻译 Kernel Exploits – Linux Privilege Escalation 这篇文章所产生,本人仅是对机器翻译中部分表达别扭的字词进行了校正及个别注释补充。导航0 前言 1 内核简介 2 寻找内核漏洞2.1 发现内核版本 2.2 手动查找内核漏洞2.2.1 通过 Google 查找内核漏洞 2.2.2…

配置逻辑删除

对于一些比较重要的数据,我们往往会采用逻辑删除的方案,即:在表中添加一个字段标记数据是否被删除 当删除数据时把标记置为true 查询时过滤掉标记为true的数据一旦采用了逻辑删除,所有的查询和删除逻辑都要跟着变化,非常麻烦。为了解决这个问题,MybatisPlus就添加了对逻辑…

Spring Boot自动装配bean到IOC容器的实现

前言Spring Boot能帮助我们Java开发者快速开发基于Spring框架的应用,除了其作为依赖管理好帮手的一众Spring-Boot-Starter之外,其自动装配(Auto Configure)特性也起到了非常重要的作用。那么Spring Boot是如何实现自动装配的呢?本文将结合源码去讲解其原理。 版本信息spri…