stm8的定时器的tim2的通道1,通道2输出pwm,对应的GPIO需要配置吗,咋么配置啊

stm8的定时器的tim2的通道1,通道2输出pwm,对应的GPIO需要配置吗,咋么配置啊,第1张

不需要任何配置的,只需要设置PWM的相关寄存,配置成输下PWM,他自动就输出PWM了
#include "STM8S103Kh" //头文件,定义各寄存器的地址
void main(void)
{
/定时器基础设置/
CLK_CKDIVR= 0x00; //内部16M时钟不分频
TIM2_PSCR = 0x00; //定时器2预分频系数为1
TIM2_CR1 = 0x01; //内部计数器使能;
TIM2_ARRH = 0x01;//0140,320分频,16M/320=50K,实测4975K
TIM2_ARRL = 0x3e;//自动装载寄存器低位;实测013e正好为500K

/PWM通道1设置/
TIM2_CCER1 |= 0x01; //开启OC1信号输出脚
TIM2_CCMR1 = 0x60; //PWM1模式
TIM2_CCR1H = 0x00; //占空比高位
TIM2_CCR1L = 0xa0; //占空比低位
TIM2_CCMR1 |= 0x08; //输出比较1预装载使能
/PWM通道2设置/
TIM2_CCER1 |= 0x10; //开启OC2信号输出脚
TIM2_CCMR2 = 0x60; //PWM1模式
TIM2_CCR2H = 0x00; //占空比高位
TIM2_CCR2L = 0x03; //占空比低位
TIM2_CCMR2 |= 0x08; //输出比较2预装载使能
/PWM通道3设置/
TIM2_CCER2 = 0x01; //开启OC3信号输出脚
TIM2_CCMR3 = 0x60; //PWM1模式
TIM2_CCR3H = 0x01; //占空比高位
TIM2_CCR3L = 0x3d; //占空比低位
TIM2_CCMR3 |= 0x08; //输出比较3预装载使能

while (1); //
}

做GPIO用的话不需要重新定义啊,但是里面要是有定时器的输出,或者计数器的输入引脚的话,要有冲突的话,就要避开那些口线,要是非用不可的话,就要修改定时器,不使用外部引脚,或者使用remap把定时器引脚移到别处去。

基于BarrierBreaker版本,基于AR9331 AP121 Demo单板 来进行描述1灯A在mach-ap121c中,定义了灯所对应的GPIO定义:#define AP121_GPIO_LED_WLAN 0#define AP121_GPIO_LED_USB 1 并定义了灯的GPIO结构对象:static struct gpio_led ap121_leds_gpio[] __initdata = { { name = "ap121:green:usb", gpio = AP121_GPIO_LED_USB, active_low = 0, }, { name = "ap121:green:wlan", gpio = AP121_GPIO_LED_WLAN, active_low = 0, }, }在初始化函数:ap121_setup 中,利用ath79_register_leds_gpio(-1, ARRAY_SIZE(ap121_leds_gpio), ap121_leds_gpio);实现了LED device的注册。此函数调用后,会创建platform类型的设备,并和leds-gpio驱动(leds-gpioc)实现了绑定。这样,就会在/sys/devices/platform/leds-gpio/目录中,产生对应的led灯的控制目录:drwxr-xr-x 2 root root 0 Jan 1 1970 ap121:green:usbdrwxr-xr-x 2 root root 0 Jan 1 1970 ap121:green:wlanB进入上述任意一个目录,如:ap121:green:wlan,会有如下文件:-rw-r--r-- 1 root root 4096 Jan 15 06:19 brightness lrwxrwxrwx 1 root root 0 Jan 15 06:04 device -> ///leds-gpio-r--r--r-- 1 root root 4096 Jan 15 06:04 max_brightnesslrwxrwxrwx 1 root root 0 Jan 15 06:04 subsystem -> /////class/leds-rw-r--r-- 1 root root 4096 Jan 15 06:04 trigger-rw-r--r-- 1 root root 4096 Jan 15 06:04 uevent则通过 echo 1 > brightness,就可以控制灯亮; echo 0 > brightness,就可以控制灯灭 2按键A在mach-ap121c中,定义了按键对应的GPIO以及数据结构对象:#define AP121_GPIO_BTN_JUMPSTART 11#define AP121_GPIO_BTN_RESET 12 以及static struct gpio_keys_button ap121_gpio_keys[] __initdata = { { desc = "jumpstart button", type = EV_KEY, code = KEY_WPS_BUTTON, //定义在gpio-button-hotplugc debounce_interval = AP121_KEYS_DEBOUNCE_INTERVAL, gpio = AP121_GPIO_BTN_JUMPSTART, active_low = 1, }, { desc = "reset button", type = EV_KEY, code = KEY_RESTART, //定义在gpio-button-hotplugc debounce_interval = AP121_KEYS_DEBOUNCE_INTERVAL, gpio = AP121_GPIO_BTN_RESET, active_low = 1, }, } 在初始化函数:ap121_setup 中,利用ath79_register_gpio_keys_polled(-1, AP121_KEYS_POLL_INTERVAL,ARRAY_SIZE(ap121_gpio_keys),ap121_gpio_keys);实现了KEY device的注册。此函数调用后,会创建platform类型的设备,并和gpio-keys-polled驱动(gpio-button-hotplugc)实现了绑定。B 当按键时,则触发button_hotplug_event函数(gpio-button-hotplugc):调用button_hotplug_create_event产生uevent事件,调用button_hotplug_fill_even填充事件(JSON格式),并最终调用button_hotplug_work发出uevent广播上述广播,被procd进程中的hotplug_handler (procd/plug/hotplugc) 收到,并根据etc/hotplugjson中预先定义的JSON内容匹配条件,定位到对应的执行函数,具体为: [ "if", [ "and", [ "has", "BUTTON" ], [ "eq", "SUBSYSTEM", "button" ], ], [ "exec", "/etc/rcbutton/%BUTTON%" ] ],和 [ "if", [ "eq", "SUBSYSTEM", [ "net", "input", "usb", "ieee1394", "block", "atm", "zaptel", "tty", "button" ] ], [ "exec", "/sbin/hotplug-call", "%SUBSYSTEM%" ] ],


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/10544707.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-09
下一篇2023-05-09

发表评论

登录后才能评论

评论列表(0条)

    保存