项目简介利用cubmx生成基于32单片机的hal库工程,然后编写程序在proteus上仿真验证。本项目最适合没有开发板的同学学习,零成本利用仿真软件率先入门stm32单片机。这是第六部分针对stm32单片机内置tim模块的pwm波形产生的学习和理解。
硬件模块stm32f103r4
示波器
软件工具cubmx
proteus
keil
电路连接图
工作流程首先,在cubmx种设置号一些参数,选择tim1定时器,按下图设置好工作模式。输出pwm的引脚是pb15引脚。
然后再按下图设置好预分频和计数值
最好设置好占空比,占空比=pulse/per,比如想要设置占空比为20%,而上面设置了计数值为1000,那么按照这个占空比,就照下图设置好pulse为200即可。
然后生成工程。
增加输出pwm的代码。
出现问题了,上网查了一下好像是超出了单片机内部的资源。网上推荐的方法是直接换一个型号的32单片机,但是我不想用这种方法,后来我删掉一行有浮点运算的printf函数就可以了,可能是printf用的太多了,太占内存。可以运行了,但是一开始还是没有pwm波形输出,于是我换了个通道,如下图。
prescaler:分频值,可以设置为0
counter mode:计数模式
counter period:自动装载值
auto-reload preload:使能自动装载功能
mode:pwm波模式
pulse:计数比较值
ch polarity:输出极性
输出的结果如下图,这是20%的
然后改变占空比为50%
输出波形
至此,pwm模块完成。
程序代码mian.c
int main(void){ /* mcu configuration--------------------------------------------------------*/ /* reset of all peripherals, initializes the flash interface and the systick. */ hal_init(); /* user code begin init */ /* user code end init */ /* configure the system clock */ systemclock_config(); /* user code begin sysinit */ /* user code end sysinit */ /* initialize all configured peripherals */ mx_gpio_init();// mx_adc1_init(); // mx_usart1_uart_init(); mx_tim1_init(); /* user code begin 2 */ /* user code end 2 */ /* infinite loop */ /* user code begin while */; hal_tim_pwm_start(&htim1,tim_channel_1);//开启pwm波形输出 __hal_tim_set_compare(&htim1, tim_channel_1, 500); //改变占空比,500/1000=50% while(1) { /* user code end while */ /* user code begin 3 */ } /* user code end 3 */}
解密:aigo国民好物移动固态硬盘是如何做到“不掉速”的
SV-7031IP网络广播终端上机架带前置放大
物联网技术发展与创新,改变着传统产业形态和人们生活方式
RTXSuper显卡玩光追游戏怎么样
华为nova7升级鸿蒙系统的教程
STM32单片机学习笔记(6):PWM波形产生
智能安全帽-智物通讯定制开发
国芯思辰|地芯科技16位100kSPS单通道模数转换器GAD7683(替代AD7683)应用于猫砂盆
入门深度学习工作原理都能看懂吗
信息安全作为"十三五"重点建设方向,重磅支持政策加速出台
便携式农产品农药残留检测仪器HM-NY06的性能描述
一文看懂计算机执行程序的过程
紫光与光宝联手,计划2018实现国产3D闪存SSD量产
什么是温度振动一体传感器?
开关电源的常见故障及其修复方法
三大场景快速落地 瑞芯微在AI领域的表现亮眼
智慧农业是如何利用智能制造促进的
有源滤波器设计实验
苹果iPhone 12有望使用802.11ay Wi-Fi标准
一带一路,中国海外轨道交通重点项目全盘点