Tengo dos programas para hacer la misma tarea. los dos deberían alternar GPIOB0
. El primer programa es este:
#include "stm32f10x.h"
/* Private functions ---------------------------------------------------------*/
GPIO_InitTypeDef GPIO_InitStructure;
void GPIO_Configuration(void);
int main(void)
{
GPIO_Configuration();
GPIOB->ODR ^= GPIO_Pin_0;
GPIOB->ODR ^= GPIO_Pin_0;
GPIOB->ODR ^= GPIO_Pin_0;
GPIOB->ODR ^= GPIO_Pin_0;
GPIOB->ODR ^= GPIO_Pin_0;
GPIOB->ODR ^= GPIO_Pin_0;
GPIOB->ODR ^= GPIO_Pin_0;
GPIOB->ODR ^= GPIO_Pin_0;
GPIOB->ODR ^= GPIO_Pin_0;
GPIOB->ODR ^= GPIO_Pin_0;
/* Infinite loop */
while (1)
{
}
}
/*******************************************************************************
* Function Name : GPIO_Configuration
* Description : Configure GPIO Pin
* Input : None
* Output : None
* Return : None
* Attention : None
*******************************************************************************/
void GPIO_Configuration(void)
{
RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOB , ENABLE);
/**
* LED1 -> PB0
*/
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOB, &GPIO_InitStructure);
}
Y la salida:
Ok,cincopulsoscomoesperaba.otroprogramaeseste:
#include"stm32f10x.h"
/* Private functions ---------------------------------------------------------*/
GPIO_InitTypeDef GPIO_InitStructure;
void GPIO_Configuration(void);
int main(void)
{
GPIO_Configuration();
GPIOB->BSRR = GPIO_Pin_0;
GPIOB->BRR = GPIO_Pin_0;
GPIOB->BSRR = GPIO_Pin_0;
GPIOB->BRR = GPIO_Pin_0;
GPIOB->BSRR = GPIO_Pin_0;
GPIOB->BRR = GPIO_Pin_0;
GPIOB->BSRR = GPIO_Pin_0;
GPIOB->BRR = GPIO_Pin_0;
GPIOB->BSRR = GPIO_Pin_0;
GPIOB->BRR = GPIO_Pin_0;
/* Infinite loop */
while (1)
{
}
}
/*******************************************************************************
* Function Name : GPIO_Configuration
* Description : Configure GPIO Pin
* Input : None
* Output : None
* Return : None
* Attention : None
*******************************************************************************/
void GPIO_Configuration(void)
{
RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOB , ENABLE);
/**
* LED1 -> PB0
*/
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOB, &GPIO_InitStructure);
}
Y salida:
Comopuedesver,solohayunpulso.¿Porqué?Parecequenopuedehacercuatropulsossiguientes.pero¿porqué?
Edit1:laMCUes
Edit2: todas las explicaciones que puede ver en el manual de referencia para estos tres registros: