STM32F217. Первая проба.

С весны лежит стартер кит на stm32f217zg, все руки не доходили даже попробовать. Пришел программатор, решил хотя бы проверить. Простенькая программка, мигает и шлет байтики по usart-у. Правда, светодиодов не нашлось, подключил 7 сегментник на PE7-PE14 и мигаю ими всеми одновременно.

#include "stm32f2xx.h"
#include "rtl.h"

void Delay (uint32_t cnt) 
{  
  while (cnt--);
}

void serialinit (void) 
{
	int i;

	RCC->AHB1ENR  |=  (1UL <<  0);    //Enable GPIOA clock   
	GPIOA->AFR[1] |= 0x770;           //PC.09 UART1_Tx, PC.10 UART1_Rx  (AF7)
	GPIOA->MODER  &= ~(0xFUL <<  18);
	GPIOA->MODER  |=  (0xAUL << 18);
		
	RCC->APB2ENR  |=  (1UL <<  4);   //Enable UART#1 clock               
	USART1->BRR = 0x0100;            //Configure 115200 baud, @ 30MHz     
	USART1->CR3 = 0x0000;            //8 bit, 1 stop bit,           
	USART1->CR2 = 0x0000;            //no parity                
	for (i = 0; i < 0x1000; i++) __NOP(); 	//avoid unwanted output              
	USART1->CR1 = 0x200C;
}

int sendchar (uint8_t c) 
{ 
	while (!(USART1->SR & 0x0080));
	USART1->DR = (c & 0x1FF);
	return (c);
}

void sendstring (uint8_t *s) 
{
	while (*s != 0) 
	{
		sendchar(*s++);
	}
}

int main (void)
{
        SystemInit();
	serialinit ();
	
	RCC->AHB1ENR	|= (1UL <<  4); 
	
	GPIOE->MODER	&= ~(0xFFFFUL << 14);   //PE.07 - PE.14 is output
  	GPIOE->MODER	|=  (0x5555UL << 14);	
	GPIOE->OTYPER   &= ~(0xFFUL << 7);	//PE.07 - PE.14 output Push-Pull 	
	GPIOE->OSPEEDR  &= ~(0xFFFFUL << 14);	//PE.07 - PE.14 is 2MHz Low Speed 
	GPIOE->PUPDR    &= ~(0xFFFFUL << 14);	//PE.07 - PE.14 no Pull up
	GPIOE->BSRRL	|= (0xFFUL <<  7);	//PE.07 - PE.14 set 1
	while (1)
	{
		GPIOE->BSRRH	|=	(0xFFUL <<  7);	//PE.07 - PE.14 set 0
		Delay (10000000); 
		GPIOE->BSRRL	|=	(0xFFUL <<  7);	//PE.07 - PE.14 set 1
		Delay (10000000);
		sendstring ("Test");
	}        
	return 0;
}



По первой очень не привычно после LPC и даже stm32f1xx. Комменты вроде все объясняют, за основу брал примеры кейла, буду дальше разбираться.

  • 0
  • 14 августа 2011, 14:32
  • lexanet

Комментарии (2)

RSS свернуть / развернуть
А на этом уровне оно разве чем-то сильно отличается от STM32F100? Ну, может, набор регистров пошире. Насколько я помню, у двухсотой серии есть поинтереснее отличия. Интерфейс камеры, например.

Алсо, слишком много магических чисел. Неужели для
RCC->AHB1ENR    |= (1UL <<  4);
нету константы?
0
  • avatar
  • Vga
  • 14 августа 2011, 14:36
Может и есть константа, я не знаю, я по Reference manual-у делал.
Вкусностей то там масса, но заголовок — первая проба, проверить живость камня и посчупать мануал. Это моя первая в жизни прога на F2xx.
0
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.