Open
Description
using this code
use cortex_m_semihosting::{dbg, hprintln};
use panic_semihosting as _;
use stm32f3xx_hal as hal;
use hal::prelude::*;
use hal::pwm;
use cortex_m::asm;
use cortex_m_rt::entry;
#[cfg_attr(not(test), entry)]
fn main() -> ! {
let device_peripherals = hal::pac::Peripherals::take().unwrap();
// Setting the clock frequency to the maximum supported value
let mut flash = device_peripherals.FLASH.constrain();
let mut reset_and_control_clock = device_peripherals.RCC.constrain();
let clocks = reset_and_control_clock
.cfgr
.sysclk(16.mhz())
.freeze(&mut flash.acr);
// Configuring PWM
let resolution = 250;
let frequency = 1.hz();
let pwm_channel_no_pins =
pwm::tim16(device_peripherals.TIM16, resolution, frequency, &clocks);
let mut gpiob = device_peripherals.GPIOB.split(&mut reset_and_control_clock.ahb);
let pb8 = gpiob.pb8.into_af1(&mut gpiob.moder, &mut gpiob.afrh);
let mut pwm_channel = pwm_channel_no_pins
.output_to_pb8(pb8);
pwm_channel.set_duty(pwm_channel.get_max_duty() / 2);
pwm_channel.enable();
loop{}
I get a pwm signal that I expect. A 50% duty cycle with a 1 second period.
If I change resolution = 200
then I get a signal that has a period of about 1/10 of the original.
Metadata
Metadata
Assignees
Labels
No labels