Exemplo n.º 1
0
// Initialize the display control GPIO pins
void SSD1306_InitGPIO(void) {
	// Enable the GPIO peripheral(s) clock
	RCC->AHBENR |= SSD1306_GPIO_PERIPH;

	// Configure CS pin as push-pull output with pull-up
	GPIO_set_mode(SSD1306_CS_PORT,GPIO_Mode_OUT,GPIO_PUPD_PU,SSD1306_CS_PIN);
	GPIO_out_cfg(SSD1306_CS_PORT,GPIO_OT_PP,GPIO_SPD_VERYLOW,SSD1306_CS_PIN);
	SSD1306_CS_H();

	// Configure DC pin as push-pull output with pull-up
	GPIO_set_mode(SSD1306_DC_PORT,GPIO_Mode_OUT,GPIO_PUPD_PU,SSD1306_DC_PIN);
	GPIO_out_cfg(SSD1306_DC_PORT,GPIO_OT_PP,GPIO_SPD_VERYLOW,SSD1306_DC_PIN);
	SSD1306_DC_L();

	// Configure RST pin as push-pull output with pull-up
	GPIO_set_mode(SSD1306_RST_PORT,GPIO_Mode_OUT,GPIO_PUPD_PU,SSD1306_RST_PIN);
	GPIO_out_cfg(SSD1306_RST_PORT,GPIO_OT_PP,GPIO_SPD_VERYLOW,SSD1306_RST_PIN);
	SSD1306_RST_H();
}
Exemplo n.º 2
0
Arquivo: sdcard.c Projeto: alemv/stm32
// De-initialize the SDIO GPIO lines to its default state
void SD_GPIO_DeInit(void) {
	// SDIO_CMD
	GPIO_set_mode(SDIO_GPIO_CMD_PORT,GPIO_Mode_AN,GPIO_PUPD_PU,SDIO_GPIO_CMD_PIN);
	GPIO_out_cfg(SDIO_GPIO_CMD_PORT,GPIO_OT_PP,GPIO_SPD_LOW,SDIO_GPIO_CMD_PIN);
	GPIO_af_cfg(SDIO_GPIO_CMD_PORT,SDIO_GPIO_CMD_SRC,GPIO_AF0);

	// SDIO_CK
	GPIO_set_mode(SDIO_GPIO_CK_PORT,GPIO_Mode_AN,GPIO_PUPD_PU,SDIO_GPIO_CK_PIN);
	GPIO_out_cfg(SDIO_GPIO_CK_PORT,GPIO_OT_PP,GPIO_SPD_LOW,SDIO_GPIO_CK_PIN);
	GPIO_af_cfg(SDIO_GPIO_CK_PORT,SDIO_GPIO_CK_SRC,GPIO_AF0);

	// SDIO_D0
	GPIO_set_mode(SDIO_GPIO_D0_PORT,GPIO_Mode_AN,GPIO_PUPD_PU,SDIO_GPIO_D0_PIN);
	GPIO_out_cfg(SDIO_GPIO_D0_PORT,GPIO_OT_PP,GPIO_SPD_LOW,SDIO_GPIO_D0_PIN);
	GPIO_af_cfg(SDIO_GPIO_D0_PORT,SDIO_GPIO_D0_SRC,GPIO_AF0);

#if (SDIO_USE_4BIT)
	// SDIO_D1
	GPIO_set_mode(SDIO_GPIO_D1_PORT,GPIO_Mode_AN,GPIO_PUPD_PU,SDIO_GPIO_D1_PIN);
	GPIO_out_cfg(SDIO_GPIO_D1_PORT,GPIO_OT_PP,GPIO_SPD_LOW,SDIO_GPIO_D1_PIN);
	GPIO_af_cfg(SDIO_GPIO_D1_PORT,SDIO_GPIO_D1_SRC,GPIO_AF0);

	// SDIO_D2
	GPIO_set_mode(SDIO_GPIO_D2_PORT,GPIO_Mode_AN,GPIO_PUPD_PU,SDIO_GPIO_D2_PIN);
	GPIO_out_cfg(SDIO_GPIO_D2_PORT,GPIO_OT_PP,GPIO_SPD_LOW,SDIO_GPIO_D2_PIN);
	GPIO_af_cfg(SDIO_GPIO_D2_PORT,SDIO_GPIO_D2_SRC,GPIO_AF0);

	// SDIO_D3
	GPIO_set_mode(SDIO_GPIO_D3_PORT,GPIO_Mode_AN,GPIO_PUPD_PU,SDIO_GPIO_D3_PIN);
	GPIO_out_cfg(SDIO_GPIO_D3_PORT,GPIO_OT_PP,GPIO_SPD_LOW,SDIO_GPIO_D3_PIN);
	GPIO_af_cfg(SDIO_GPIO_D3_PORT,SDIO_GPIO_D3_SRC,GPIO_AF0);
#endif // SDIO_USE_4BIT
}
Exemplo n.º 3
0
Arquivo: sdcard.c Projeto: alemv/stm32
// Initialize the SDIO GPIO lines
void SD_GPIO_Init(void) {
	// Enable the SDIO corresponding GPIO peripherals
	RCC->AHB2ENR |= SDIO_GPIO_PERIPH;

	// Configure SDIO GPIO pins

	// SDIO_CMD
	GPIO_set_mode(SDIO_GPIO_CMD_PORT,GPIO_Mode_AF,GPIO_PUPD_PU,SDIO_GPIO_CMD_PIN);
	GPIO_out_cfg(SDIO_GPIO_CMD_PORT,GPIO_OT_PP,GPIO_SPD_HIGH,SDIO_GPIO_CMD_PIN);
	GPIO_af_cfg(SDIO_GPIO_CMD_PORT,SDIO_GPIO_CMD_SRC,SDIO_GPIO_AF);

	// SDIO_CK
	GPIO_set_mode(SDIO_GPIO_CK_PORT,GPIO_Mode_AF,GPIO_PUPD_PU,SDIO_GPIO_CK_PIN);
	GPIO_out_cfg(SDIO_GPIO_CK_PORT,GPIO_OT_PP,GPIO_SPD_HIGH,SDIO_GPIO_CK_PIN);
	GPIO_af_cfg(SDIO_GPIO_CK_PORT,SDIO_GPIO_CK_SRC,SDIO_GPIO_AF);

	// SDIO_D0
	GPIO_set_mode(SDIO_GPIO_D0_PORT,GPIO_Mode_AF,GPIO_PUPD_PU,SDIO_GPIO_D0_PIN);
	GPIO_out_cfg(SDIO_GPIO_D0_PORT,GPIO_OT_PP,GPIO_SPD_HIGH,SDIO_GPIO_D0_PIN);
	GPIO_af_cfg(SDIO_GPIO_D0_PORT,SDIO_GPIO_D0_SRC,SDIO_GPIO_AF);

#if (SDIO_USE_4BIT)
	// SDIO_D1
	GPIO_set_mode(SDIO_GPIO_D1_PORT,GPIO_Mode_AF,GPIO_PUPD_PU,SDIO_GPIO_D1_PIN);
	GPIO_out_cfg(SDIO_GPIO_D1_PORT,GPIO_OT_PP,GPIO_SPD_HIGH,SDIO_GPIO_D1_PIN);
	GPIO_af_cfg(SDIO_GPIO_D1_PORT,SDIO_GPIO_D1_SRC,SDIO_GPIO_AF);

	// SDIO_D2
	GPIO_set_mode(SDIO_GPIO_D2_PORT,GPIO_Mode_AF,GPIO_PUPD_PU,SDIO_GPIO_D2_PIN);
	GPIO_out_cfg(SDIO_GPIO_D2_PORT,GPIO_OT_PP,GPIO_SPD_HIGH,SDIO_GPIO_D2_PIN);
	GPIO_af_cfg(SDIO_GPIO_D2_PORT,SDIO_GPIO_D2_SRC,SDIO_GPIO_AF);

	// SDIO_D3
	GPIO_set_mode(SDIO_GPIO_D3_PORT,GPIO_Mode_AF,GPIO_PUPD_PU,SDIO_GPIO_D3_PIN);
	GPIO_out_cfg(SDIO_GPIO_D3_PORT,GPIO_OT_PP,GPIO_SPD_HIGH,SDIO_GPIO_D3_PIN);
	GPIO_af_cfg(SDIO_GPIO_D3_PORT,SDIO_GPIO_D3_SRC,SDIO_GPIO_AF);
#endif // SDIO_USE_4BIT
}
Exemplo n.º 4
0
int main(void) {
	// Initialize the MCU clock system
	SetSysClock();
	SystemCoreClockUpdate();


	// Prefetch is useful if at least one wait state is needed to access the Flash memory
	if (RCC_GetLatency() != FLASH_ACR_LATENCY_0WS) {
		// Enable prefetch buffer (a.k.a ART)
		RCC_PrefetchEnable();
	}


	// Initialize debug output port (USART2)
	//   clock source: SYSCLK
	//   mode: transmit only
	USART2_HandleInit();
	RCC_SetClockUSART(RCC_USART2_CLK_SRC, RCC_PERIPH_CLK_SYSCLK);
	USART_Init(&hUSART2, USART_MODE_TX);

	// Configure USART:
	//   oversampling by 16
	//   115200, 8-N-1
	//   no hardware flow control
	USART_SetOversampling(&hUSART2, USART_OVERS16);
	USART_SetBaudRate(&hUSART2, 115200);
	USART_SetDataMode(&hUSART2, USART_DATAWIDTH_8B, USART_PARITY_NONE, USART_STOPBITS_1);
	USART_SetHWFlow(&hUSART2, USART_HWCTL_NONE);
	USART_Enable(&hUSART2);
	USART_CheckIdleState(&hUSART2, 0xC5C10); // Timeout of about 100ms at 80MHz CPU


	// Say "hello world" into the USART port
	RCC_ClocksTypeDef Clocks;
	RCC_GetClocksFreq(&Clocks);
	printf("---STM32L476RG---\r\n");
	printf("STM32L476 Template (%s @ %s)\r\n", __DATE__, __TIME__);
	printf("CPU: %.3uMHz\r\n", SystemCoreClock / 1000);
	printf("SYSCLK: %.3uMHz, HCLK: %.3uMHz\r\n", Clocks.SYSCLK_Frequency / 1000, Clocks.HCLK_Frequency / 1000);
	printf("APB1: %.3uMHz, APB2: %.3uMHz\r\n", Clocks.PCLK1_Frequency / 1000, Clocks.PCLK2_Frequency / 1000);
	printf("System clock: %s\r\n", _sysclk_src_str[RCC_GetSysClockSource()]);
#if 0
	// DEV: 0x461 = STM32L496xx/4A6xx
	//      0x415 = STM32L475xx/476xx/486xx devices
	// REV: 0x1000: Rev 1 for STM32L475xx/476xx/486xx devices
	//              Rev A for STM32L496xx/4A6xx devices
	//      0x1001: Rev 2 for STM32L475xx/476xx/486xx devices
	//              Rev B for STM32L496xx/4A6xx devices
	//      0x1003: Rev 3 for STM32L475xx/476xx/486xx devices
	//      0x1007: Rev 4 for STM32L475xx/476xx/486xx devices
	printf("MCU: DEV=%03X REV=%04X FLASH=%uKB ID=%08X%08X%08X\r\n",
			DBGMCU->IDCODE & 0xFFFU, // DEV_ID
			DBGMCU->IDCODE >> 16, // REV_ID
			(uint16_t)(*(volatile uint32_t*)(FLASHSIZE_BASE)), // Flash size in kilobytes
			*(volatile uint32_t*)(UID_BASE), // Unique ID 96 bits
			*(volatile uint32_t*)(UID_BASE + 4U),
			*(volatile uint32_t*)(UID_BASE + 8U)
		);
#endif // MCU model


	// Initialize delay functions
	Delay_Init();


	// Initialize the PA5 pin (LED on the Nucleo board)
	// Enable the GPIOA peripheral
	RCC->AHB2ENR |= RCC_AHB2ENR_GPIOAEN;
	// Configure PA5 as push-pull output without pull-up, at lowest speed
	GPIO_set_mode(GPIOA, GPIO_Mode_OUT, GPIO_PUPD_NONE, GPIO_PIN_5);
	GPIO_out_cfg(GPIOA, GPIO_OT_PP, GPIO_SPD_LOW, GPIO_PIN_5);


	// The main loop
	while (1) {
		// Invert the PA5 pin state every half of second
		Delay_ms(500);
		GPIO_PIN_INVERT(GPIOA, GPIO_PIN_5);
	}
}