MSP432P401R TI Drivers 库函数学习笔记(五)PWM
目录
- API (机翻)
- 函数
- 上机实战
- 配置引脚
- PWM初始化,实现简易呼吸灯的效果
- 实验结果
- 完整代码
- myPWM.c
- myPWM.h
- myTask.c
- myTask.h
- main.c
- main.h
平台:Code Composer Studio 10.4.0
MSP432P401R SimpleLink™ 微控制器 LaunchPad™ 开发套件
(MSP-EXP432P401R)
API (机翻)
PWM API 官方手册
函数
void PWM_close (PWM_Handle handle)
函数关闭由PWM句柄指定的PWM实例int_fast16_t PWM_control (PWM_Handle handle, uint_fast16_t cmd, void *arg)
函数在给定的PWM_Handle上执行特定的实现特性void PWM_init (void)
这个函数初始化PWM模块PWM_Handle PWM_open (uint_least8_t index, PWM_Params *params)
这个函数打开一个给定的PWM实例,并将周期、负载和空闲电平设置为params参数中指定的值void PWM_Params_init (PWM_Params *params)
函数将PWM_Params结构初始化为默认值int_fast16_t PWM_setDuty (PWM_Handle handle, uint32_t duty)
命令功能设置指定PWM句柄的占空比。PWM实例在主动高电平输出模式(非开漏)下运行;
0%代表低电平,100%代表高电平。这个API可以被调用,而PWM正在运行&负载必须总是
低于或等于周期。如果调用该函数时发生错误,PWM占空比将保持不变int_fast16_t PWM_setPeriod (PWM_Handle handle, uint32_t period)
设置指定PWM句柄的周期。这个API可以在PWM运行时调用。周期必须总是大于等于占空比。
如果调用该函数时发生错误,PWM周期将保持不变int_fast16_t PWM_setDutyAndPeriod (PWM_Handle handle, uint32_t duty, uint32_t period)
设置指定PWM句柄的周期和占空比。这个API必须在PWM运行时调用。周期必须总是大于占空比。
如果在调用函数时发生错误,周期和占空比将保持不变void PWM_start (PWM_Handle handle)
以当前设置启动指定的PWM句柄void PWM_stop (PWM_Handle handle)
能停止指定的PWM句柄。输出将被设置为PWM_open()中的参数指定的空闲级别
上机实战
配置引脚
LED1,用于指示单片机正常工作
PWM输出引脚
PWM初始化,实现简易呼吸灯的效果
/** ======== mainThread ========*/
void *mainThread(void *arg0)
{float LED2_G_Duty = 0;int8_t LED2_DIR = 1;My_Task_Init(LED_Task, 1, 1024);My_PWM_Hz_Init(&hpwm1, PWM_1, 1000);while(1){if(LED2_G_Duty >= 100)LED2_DIR = -1;else if(LED2_G_Duty <= 0)LED2_DIR = 1;LED2_G_Duty += LED2_DIR * 0.5;if(LED2_G_Duty < 0)LED2_G_Duty = 0;else if(LED2_G_Duty > 100)LED2_G_Duty = 100;My_PWM_setDuty(&hpwm1, LED2_G_Duty);usleep(1000);}
}
实验结果
完整代码
myPWM.c
/** myPWM.c** Created on: 2021年8月2日* Author: Royic*/
// Import PWM Driver definitions#include "./inc/myPWM.h"PWM_Handle hpwm1;void My_PWM_Hz_Init(PWM_Handle *hpwm, uint_least8_t index, uint32_t Frequency)
{PWM_Params pwmParams;// Initialize the PWM driver.PWM_init();// Initialize the PWM parametersPWM_Params_init(&pwmParams);pwmParams.idleLevel = PWM_IDLE_LOW; // Output low when PWM is not runningpwmParams.periodUnits = PWM_PERIOD_HZ; // Period is in HzpwmParams.periodValue = Frequency; // Frequency HzpwmParams.dutyUnits = PWM_DUTY_FRACTION; // Duty is in fractional percentagepwmParams.dutyValue = 0; // 0% initial duty cycle// Open the PWM instance*hpwm = PWM_open(index, &pwmParams);if (*hpwm == NULL){// PWM_open() failedwhile (1);}PWM_start(*hpwm); // start PWM with 0% duty cycle
}inline void My_PWM_setDuty(PWM_Handle *hpwm, float Percentage)
{PWM_setDuty(*hpwm, (uint32_t) (PWM_DUTY_FRACTION_MAX / 100. * Percentage)); // set duty cycle to Duty_Cycle%
}
myPWM.h
/** myTask.h** Created on: 2021年8月2日* Author: Royic*/#ifndef INC_MYTASK_H_
#define INC_MYTASK_H_#include "./inc/main.h"void *mainThread(void *arg0);
void My_Task_Init(void *(*startroutine)(void *), int priority, size_t stacksize);void *LED_Task(void *arg0);#endif /* INC_MYTASK_H_ */
myTask.c
/** myTask.c** Created on: 2021年8月2日* Author: Royic*//* POSIX Header files */
#include <pthread.h>/* RTOS header files */
#include <ti/sysbios/BIOS.h>#include "./inc/myTask.h"/* Driver Header files */
#include <ti/drivers/GPIO.h>void My_Task_Init(void *(*startroutine)(void *), int priority, size_t stacksize)
{pthread_t thread;pthread_attr_t attrs;struct sched_param priParam;int retc;/* Initialize the attributes structure with default values */pthread_attr_init(&attrs);/* Set priority, detach state, and stack size attributes */priParam.sched_priority = priority;retc = pthread_attr_setschedparam(&attrs, &priParam);retc |= pthread_attr_setdetachstate(&attrs, PTHREAD_CREATE_DETACHED);retc |= pthread_attr_setstacksize(&attrs, stacksize);if (retc != 0){/* failed to set attributes */while (1){}}retc = pthread_create(&thread, &attrs, startroutine, NULL);if (retc != 0){/* pthread_create() failed */while (1){}}
}void *LED_Task(void *arg0)
{while(1){GPIO_toggle(LED1);sleep(1);}
}
myTask.h
/** myTask.h** Created on: 2021年8月2日* Author: Royic*/#ifndef INC_MYTASK_H_
#define INC_MYTASK_H_#include "./inc/main.h"void *mainThread(void *arg0);
void My_Task_Init(void *(*startroutine)(void *), int priority, size_t stacksize);void *LED_Task(void *arg0);#endif /* INC_MYTASK_H_ */
main.c
/** ======== main_tirtos.c ========*/#include "./inc/main.h"/* POSIX Header files */
#include <pthread.h>/* RTOS header files */
#include <ti/sysbios/BIOS.h>/* Driver configuration */
#include <ti/drivers/Board.h>
#include <ti/drivers/GPIO.h>#include "./inc/myTask.h"#include "./inc/myPWM.h"/** ======== main ========*/
int main(void)
{/* Call driver init functions */Board_init();GPIO_init();My_Task_Init(mainThread, 1, 1024);BIOS_start();return (0);
}/** ======== mainThread ========*/
void *mainThread(void *arg0)
{float LED2_G_Duty = 0;int8_t LED2_DIR = 1;My_Task_Init(LED_Task, 1, 1024);My_PWM_Hz_Init(&hpwm1, PWM_1, 1000);while(1){if(LED2_G_Duty >= 100)LED2_DIR = -1;else if(LED2_G_Duty <= 0)LED2_DIR = 1;LED2_G_Duty += LED2_DIR * 0.5;if(LED2_G_Duty < 0)LED2_G_Duty = 0;else if(LED2_G_Duty > 100)LED2_G_Duty = 100;My_PWM_setDuty(&hpwm1, LED2_G_Duty);usleep(1000);}
}
main.h
/** main.h** Created on: 2021年8月2日* Author: Royic*/#ifndef INC_MAIN_H_
#define INC_MAIN_H_/* For usleep() */
#include <unistd.h>
#include <stdint.h>
#include <stddef.h>/* Driver configuration */
#include "ti_drivers_config.h"#endif /* INC_MAIN_H_ */
MSP432P401R TI Drivers 库函数学习笔记(五)PWM相关推荐
- MSP432P401R TI Drivers 库函数学习笔记(八)ADC
目录 API (机翻) 上机实战 引脚配置 ADC引脚配置 串口引脚配置 指示工作状态的LED1引脚配置 代码部分 ADC初始化和读取函数 myADC.c myADC.h 获取数据并通过串口发送 ma ...
- MSP432P401R TI Drivers 库函数学习笔记(七)I2C驱动OLED屏幕
目录 API (机翻) 上机实战 引脚配置 I2C引脚配置 工作指示灯LED1引脚配置 文件结构 I2C 初始化.读写函数 myI2C.c myI2C.h OLED初始化和测试代码 main.c ma ...
- MSP432P401R TI Drivers 库函数学习笔记(六)UART 串口
目录 API (机翻) 上机实战 配置 初始化和实验 实验结果 整体代码 myUart.c myUart.h myTask.c myTask.h main.c main.h 平台:Code Compo ...
- MSP432P401R TI Drivers 库函数学习笔记(四)GPIO
目录 API 头文件 函数 (机翻) 宏 GPIO驱动程序api返回的通用状态代码 GPIO_PinConfig输出引脚配置宏 GPIO_PinConfig输入引脚配置宏 GPIO_PinConfig ...
- MSP432P401R TI Drivers 库函数学习笔记(三)认识任务的创建及图形化配置
目录 任务的简单创建 图形化配置上手 简简单单点个灯 配置引脚 建立任务 实验结果 整体代码 main.c myTask.c myTask.h 平台:Code Composer Studio 10.4 ...
- MSP432P401R TI Drivers 库函数学习笔记(二)认识TI-RTOS (TI-POSIX)
目录 简介 TI-RTOS FreeRTOS POSIX 运行时对象查看器 (Runtime Object Viewer) TI-POSIX 介绍 在源代码中使用 POSIX TI-POSIX支持的函 ...
- MSP432P401R TI Drivers 库函数学习笔记(一)导入工程模板
目录 从Resource Explorer中导入 从SDK导入 测试 平台:Code Composer Studio 10.4.0 MSP432P401R SimpleLink™ 微控制器 Launc ...
- 【K210】K210学习笔记五——串口通信
[K210]K210学习笔记五--串口通信 前言 K210如何进行串口通信 K210串口配置 K210串口发送相关定义 K210串口接收相关定义 K210串口发送接收测试 完整源码 前言 本人大四学生 ...
- python函数是一段具有特定功能的语句组_Python学习笔记(五)函数和代码复用
本文将为您描述Python学习笔记(五)函数和代码复用,具体完成步骤: 函数能提高应用的模块性,和代码的重复利用率.在很多高级语言中,都可以使用函数实现多种功能.在之前的学习中,相信你已经知道Pyth ...
最新文章
- react项目开发步骤_成为专业React开发人员的31个步骤
- Java设计模式学习06——静态代理与动态代理(转)
- 【备忘录】使用mongodb,报db.collection is not a function
- 矩阵分析与多元统计12 0-1矩阵 交换矩阵简介
- [专栏目录]-环境搭建安装问题笔记目录
- 使用jqprint插件完成页面打印
- 再谈 $* 和 $@ 在 Bash 中的表现
- BZOJ1503(Splay)
- 前端学习(3270):js中this的使用call bind
- 计算机工作对身体有害吗,在电脑前长时间工作会对身体有害处吗?
- LeetCode 35. Search Insert Position
- 什么是DevOps?人员,流程和产品的结合,过程、方法与系统的统称
- Clickhouse:分区和数值化优化实测
- mac格式化sd卡 linux,[原创翻译]为NOOBS格式化SDXC卡(树莓派官方文档)
- 微信支付开发java开发_微信公众号支付开发全过程 (java 版)
- 济安横断面怎么去水印_济安横断面设计软件
- 邮件服务器匿名,ProtonMail最安全且匿名邮箱免费服务
- 假设一张纸足够大并且可以无限折叠,假设一张纸足够大并且可以无限折叠,一张纸的厚度是0.5mm,那么这张纸折叠多少次可以到达珠穆朗玛峰的高度8848.43m。
- sv- typedef
- 机器学习:局部加权线性回归(Locally Weighted Linear Regression)
热门文章
- JavaScript代码片段
- sql2008 获取表结构说明
- AC Again hdoj 1582 搜索
- nagios监控之(监控配置)
- smarty二维foreach示例[顺代一维数组],再次加强版
- 熊猫分发_熊猫新手:第二部分
- PHP进程1608占用了9012,swoole (ERRNO 9012): worker exit timeout, forced to terminate
- leetcode 82. 删除排序链表中的重复元素 II(map)
- r语言r-shiny_使用Shiny和R构建您的第一个Web应用程序仪表板
- day01_初识python