使用STM32的delay函数输出pwm信号,用来驱动舵机。
大家通过这个可以理解pwm信号的原理。附件是视频。
视频截图:
有两个文件,led.c:
- #define LED1_GPIO_PORT GPIOB
- #define LED1_GPIO_CLK RCC_APB2Periph_GPIOB
- #define LED1_GPIO_PIN GPIO_Pin_0
- #define digitalHi(p,i) {p->BSRR=i;}
- #define digitalLo(p,i) {p->BRR=i;}
- #define digitalToggle(p,i) {p->ODR ^=i;}
- #define LED1_TOGGLE digitalToggle(LED1_GPIO_PORT,LED1_GPIO_PIN)
- #define LED1_OFF digitalHi(LED1_GPIO_PORT,LED1_GPIO_PIN)
- #define LED1_ON digitalLo(LED1_GPIO_PORT,LED1_GPIO_PIN)
- #define LED2_GPIO_PORT GPIOB
- #define LED2_GPIO_CLK RCC_APB2Periph_GPIOB
- #define LED2_GPIO_PIN GPIO_Pin_5
- #define digitalHi(p,i) {p->BSRR=i;}
- #define digitalLo(p,i) {p->BRR=i;}
- #define digitalToggle(p,i) {p->ODR ^=i;}
- #define LED2_TOGGLE digitalToggle(LED2_GPIO_PORT,LED2_GPIO_PIN)
- #define LED2_OFF digitalHi(LED2_GPIO_PORT,LED2_GPIO_PIN)
- #define LED2_ON digitalLo(LED2_GPIO_PORT,LED2_GPIO_PIN)
- #define LED3_GPIO_PORT GPIOB
- #define LED3_GPIO_CLK RCC_APB2Periph_GPIOB
- #define LED3_GPIO_PIN GPIO_Pin_1
- #define digitalHi(p,i) {p->BSRR=i;}
- #define digitalLo(p,i) {p->BRR=i;}
- #define digitalToggle(p,i) {p->ODR ^=i;}
- #define LED3_TOGGLE digitalToggle(LED3_GPIO_PORT,LED3_GPIO_PIN)
- #define LED3_OFF digitalHi(LED3_GPIO_PORT,LED3_GPIO_PIN)
- #define LED3_ON digitalLo(LED3_GPIO_PORT,LED3_GPIO_PIN)
- void LED_GPIO_Config(void)
- {
- GPIO_InitTypeDef GPIO_InitStructure; //???????
- RCC_APB2PeriphClockCmd(LED1_GPIO_CLK|LED2_GPIO_CLK|LED3_GPIO_CLK, ENABLE); //??GPIOD???
- GPIO_InitStructure.GPIO_Pin = LED1_GPIO_PIN; //????13
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //??????
- GPIO_Init(LED1_GPIO_PORT, &GPIO_InitStructure);
- GPIO_InitStructure.GPIO_Pin = LED2_GPIO_PIN;
- GPIO_Init(LED2_GPIO_PORT, &GPIO_InitStructure);
- GPIO_InitStructure.GPIO_Pin = LED3_GPIO_PIN;
- GPIO_Init(LED3_GPIO_PORT, &GPIO_InitStructure);
- GPIO_SetBits(LED1_GPIO_PORT,LED1_GPIO_PIN);
- GPIO_SetBits(LED2_GPIO_PORT,LED2_GPIO_PIN);
- GPIO_SetBits(LED3_GPIO_PORT,LED3_GPIO_PIN);
- }
main.c
- void Delay(int n)
- {
- n*=100;
- while(n>0)
- {
- n--;
- }
- }
- void main(void)
- {
- int i;
- LED_GPIO_Config();
- LED1_ON;
- Delay(10000);
- LED1_OFF;
- while(1)
- {
- for(i=60;i<=360;i++)
- {
- GPIO_SetBits(GPIOB,GPIO_Pin_0);
- Delay(i);
- GPIO_ResetBits(GPIOB,GPIO_Pin_0);
- Delay(2400-i);
- }
- for(i;i>60;i--)
- {
- GPIO_SetBits(GPIOB,GPIO_Pin_0);
- Delay(i);
- GPIO_ResetBits(GPIOB,GPIO_Pin_0);
- Delay(2400-i);
- }
- }
- }
|