NUCLEO

Z MediaWiki SPŠ a VOŠ Písek
Verze z 20. 6. 2015, 07:57, kterou vytvořil JA (diskuse | příspěvky) (Založena nová stránka: NUCLEO soutěž: [http://measure.feld.cvut.cz/soutez/soutez2015 Cortex Challenge 2015] vývojový kit: [https://developer.mbed.org/platforms/ST-Nucleo-F030R8/ NUCLEO]...)
(rozdíl) ← Starší verze | zobrazit aktuální verzi (rozdíl) | Novější verze → (rozdíl)
Skočit na navigaci Skočit na vyhledávání

NUCLEO

soutěž: Cortex Challenge 2015

vývojový kit: NUCLEO

Nucleo pinout

Arduino-compatible headers

Morpho headers

These headers give access to all STM32 pins.



Source code

 
#include "mbed.h"
 
<source lang="asm">

DigitalOut myled(LED1);
 
int main() {
    while(1) {
        myled = 1; // LED is ON
        wait(0.2); // 200 ms
        myled = 0; // LED is OFF
        wait(1.0); // 1 sec
    }
}


Blink color LED RGB

#include "mbed.h"
 
DigitalOut red(D5);
DigitalOut blue(D8);
DigitalOut green(D9);
int i;
 
int main() {
    while(1) {
        for (i=1; i<7; i++) {
            red = i & 1;
            blue = i & 2;
            green = i & 4;
            wait(0.2);
        }
    }
}

Read Button

#include "mbed.h"
 
DigitalIn mybutton(USER_BUTTON);
DigitalOut myled(LED1);
 
int main() {
  while(1) {
    if (mybutton == 0) { // Button is pressed
      myled = !myled; // Toggle the LED state
      wait(0.2); // 200 ms
    }
  }
}

PWM

#include "mbed.h"
 
PwmOut mypwm(PWM_OUT);
 
DigitalOut myled(LED1);
 
int main() {
    
    mypwm.period_ms(10);
    mypwm.pulsewidth_ms(1);
  
    printf("pwm set to %.2f %%\n", mypwm.read() * 100);
    
    while(1) {
        myled = !myled;
        wait(1);
    }
}


7 segment

This is my code from https://goo.gl/3BHgTp

/**
  ******************************************************************************
  * @file    main.c 
  * @author  HuongLQ
  * @version V1.0.0
	* @kit STM32F030R8T6 Discovery
  * @date    01/05/2014
  ******************************************************************************
  
  */
	
#include "main.h"


GPIO_InitTypeDef GPIO_InitStructure;
USART_InitTypeDef USART1_InitStructure;
EXTI_InitTypeDef EXTI_InitStructure;
NVIC_InitTypeDef NVIC_InitStructure;


char RxBuffer1[10]; 
uint8_t RxIndex1 = 0;
uint8_t led_number[4] = {0,0,0,0};
//uint8_t NbrOfDataToRead1 = 4;
uint8_t t;


void write_led_7_segment(__IO uint8_t number);
void write_digit(__IO uint8_t digit);


void GPIO_Configuration(void);
void EXTI_Configuration(void);
void USART_Configuration(void);


int main(void)
{
  GPIO_Configuration();
  EXTI_Configuration();
	USART_Configuration();
	
	SysTick_Config(SystemCoreClock / 1000);
	
  while(1)
  {  
		//USART_SendData(USART1, 'a');
	}
}

void GPIO_Configuration(){
	// Enable GPIOA & GPIOB Clock
	RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA | RCC_AHBPeriph_GPIOB, ENABLE);
	
	// Cau hinh PA6,7,13-15 va PB0,1,3-7 la chan ket noi cac thanh LED, che do output push-pull.
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7 | GPIO_Pin_11 | GPIO_Pin_12 | GPIO_Pin_15;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
	GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
	GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
  GPIO_Init(GPIOA, &GPIO_InitStructure);
	
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
	GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
	GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
  GPIO_Init(GPIOB, &GPIO_InitStructure);
	
	
	// Cau hinh PA0-2 la chan ket noi button, che do input floating.
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;
	GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
	GPIO_Init(GPIOA, &GPIO_InitStructure);  
}

void USART_Configuration(){
	// Enable peripheral USART clock
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);
	
	// Cau hinh AFConfig de thuc hien chuc nang thay the 
	// (neu k su dung AFConfig thi cac pin chi la GPIO ma k thuc hien chuc nang USART)
	GPIO_PinAFConfig(GPIOA, GPIO_PinSource9, GPIO_AF_1);
  GPIO_PinAFConfig(GPIOA, GPIO_PinSource10, GPIO_AF_1);
	
//  // Cau hinh USART1 TX la chan output push - pull
//	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
//  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
//  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
//  GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
//  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP ;
//  GPIO_Init(GPIOA, &GPIO_InitStructure);
//	
//	// Cau hinh USART1 RX la chan input floating.
//	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
//	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
//	GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
//	GPIO_Init(GPIOA, &GPIO_InitStructure);
	
	GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_9 | GPIO_Pin_10;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
  GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
  GPIO_Init(GPIOA, &GPIO_InitStructure);
	
	NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;
  NVIC_InitStructure.NVIC_IRQChannelPriority = 0x02;
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  NVIC_Init(&NVIC_InitStructure);
	
	// Cau hinh USART1
	USART1_InitStructure.USART_BaudRate = 115200;
  USART1_InitStructure.USART_WordLength = USART_WordLength_8b;
  USART1_InitStructure.USART_StopBits = USART_StopBits_1;
  USART1_InitStructure.USART_Parity = USART_Parity_No;
  USART1_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
  USART1_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
	USART_Init(USART1, &USART1_InitStructure);
	
	USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);
	//USART_ITConfig(USART1, USART_IT_TXE, ENABLE);
	
	// Enable UART1
	USART_Cmd(USART1, ENABLE);
}


void EXTI_Configuration(){
	// Enable SYSCFG clock 
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);
  
  // Ket noi EXTI Line0,1 toi PA0,1
  SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOA, EXTI_PinSource0);


  // Cau hinh EXTI0,1
  EXTI_InitStructure.EXTI_Line = EXTI_Line0;
  EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
  EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;
  EXTI_InitStructure.EXTI_LineCmd = ENABLE;
  EXTI_Init(&EXTI_InitStructure);
	
  // Cau hinh uu tien ngat cho ngat EXTI
  NVIC_InitStructure.NVIC_IRQChannel = EXTI0_1_IRQn;
  NVIC_InitStructure.NVIC_IRQChannelPriority = 0x00;
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  NVIC_Init(&NVIC_InitStructure);
	
	
	EXTI_ClearITPendingBit(EXTI_Line0);
}


void SysTick_Handler(void)
{
	static uint32_t time = 0;
	time++;
	if ((time > 0) && (time <= 5)){
		write_digit(1);
		write_led_7_segment(led_number[0]);
	}
	if ((time > 5) && (time <= 10)){
		write_digit(2);
		write_led_7_segment(led_number[1]);
	}
	if ((time > 10) && (time <= 15)){
		write_digit(3);
		write_led_7_segment(led_number[2]);
	}
	if ((time > 15) && (time <= 20)){
		write_digit(4);
		write_led_7_segment(led_number[3]);
		if (time == 20){
			time = 0;
		}
	}
}


void EXTI0_1_IRQHandler(void)
{
	if(EXTI_GetITStatus(EXTI_Line0) != RESET)
	{		
		USART_SendData(USART1, 'S');
		EXTI_ClearITPendingBit(EXTI_Line0);
	}
}


void USART1_IRQHandler(void)
{  // co the su dung static cho bien RxIndex1 de co the reset bien nay ve 0
	//static uint8_t RxIndex1 = 0;
	uint8_t i = 0;
	
//	if (USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) // Received characters modify string
//		{
//			if(USART_ReceiveData(USART1)== '1')
//			USART_SendData(USART1, 'a');
//		}
//	USART_ClearITPendingBit(USART1, USART_IT_RXNE);


	if (USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) // Received characters modify string
		{
			//RxBuffer1[RxIndex1] = USART_ReceiveData(USART1);
			//USART_SendData(USART1, RxBuffer1[RxIndex1]);
			//USART_SendData(USART1, RxBuffer1[0]);
			//led_number[RxIndex1] = (uint8_t)(RxBuffer1[RxIndex1]);
//			//USART_SendData(USART1, 'a');
			led_number[RxIndex1] = USART_ReceiveData(USART1);
			USART_SendData(USART1, led_number[RxIndex1]);
			RxIndex1++;
//			if (RxIndex1 >= 4){
//				USART_ITConfig(USART1, USART_IT_RXNE, DISABLE);
//				RxIndex1 = 0;
//			}
		}
		
//	for (i = 0; i < 4; i++){
//		led_number[i] = (uint8_t)RxBuffer1[i];
//		USART_SendData(USART1, led_number[i]); 
//	}
	
	//RxIndex1 = 0; // Khi su dung RxIndex1 = 0 khi RxIndex1 khong phai la bien static-> Du lieu moi luon duoc gan vao RxBuffer1[0]
	if (RxIndex1 == 4){
//		for (i = 0; i < 4; i++)
//		{
//			led_number[i] = (uint8_t)RxBuffer1[i];
//			USART_SendData(USART1, led_number[i]);
//		}
		RxIndex1 = 0;
	}
	USART_ClearITPendingBit(USART1, USART_IT_RXNE);
}


void write_digit(__IO uint8_t digit){
	if (digit == 1){
		// digit 1 xuat 1; digit 2, 3, 4 xuat 0
		GPIO_WriteBit(GPIOB, GPIO_Pin_1, (BitAction)(1)); // digit 1
		GPIO_WriteBit(GPIOB, GPIO_Pin_0, (BitAction)(0)); // digit 2
		GPIO_WriteBit(GPIOA, GPIO_Pin_7, (BitAction)(0)); // digit 3
		GPIO_WriteBit(GPIOA, GPIO_Pin_6, (BitAction)(0)); // digit 4
	}
	if (digit == 2){
		// digit 2 xuat 1; digit 1, 3, 4 xuat 0
		GPIO_WriteBit(GPIOB, GPIO_Pin_1, (BitAction)(0)); // digit 1
		GPIO_WriteBit(GPIOB, GPIO_Pin_0, (BitAction)(1)); // digit 2
		GPIO_WriteBit(GPIOA, GPIO_Pin_7, (BitAction)(0)); // digit 3
		GPIO_WriteBit(GPIOA, GPIO_Pin_6, (BitAction)(0)); // digit 4
	}
	if (digit == 3){
		// digit 3 xuat 1; digit 1, 2, 4 xuat 0
		GPIO_WriteBit(GPIOB, GPIO_Pin_1, (BitAction)(0)); // digit 1
		GPIO_WriteBit(GPIOB, GPIO_Pin_0, (BitAction)(0)); // digit 2
		GPIO_WriteBit(GPIOA, GPIO_Pin_7, (BitAction)(1)); // digit 3
		GPIO_WriteBit(GPIOA, GPIO_Pin_6, (BitAction)(0)); // digit 4
	}
	if (digit == 4){
		// digit 4 xuat 1; digit 1, 2, 3 xuat 0
		GPIO_WriteBit(GPIOB, GPIO_Pin_1, (BitAction)(0)); // digit 1
		GPIO_WriteBit(GPIOB, GPIO_Pin_0, (BitAction)(0)); // digit 2
		GPIO_WriteBit(GPIOA, GPIO_Pin_7, (BitAction)(0)); // digit 3
		GPIO_WriteBit(GPIOA, GPIO_Pin_6, (BitAction)(1)); // digit 4
	}
}


void write_led_7_segment(__IO uint8_t number){
	
	// Muc logic 0 -> led sang, muc logic 1 -> led toi
	if (number == 0){
		GPIO_WriteBit(GPIOA, GPIO_Pin_12, (BitAction)(0)); // led A
		GPIO_WriteBit(GPIOB, GPIO_Pin_4, (BitAction)(0)); // led B
		GPIO_WriteBit(GPIOA, GPIO_Pin_15, (BitAction)(0)); // led C
		GPIO_WriteBit(GPIOB, GPIO_Pin_6, (BitAction)(0)); // led D
		GPIO_WriteBit(GPIOB, GPIO_Pin_7, (BitAction)(0)); // led E
		GPIO_WriteBit(GPIOA, GPIO_Pin_11, (BitAction)(0)); // led F
		GPIO_WriteBit(GPIOB, GPIO_Pin_3, (BitAction)(1)); // led G
		GPIO_WriteBit(GPIOB, GPIO_Pin_5, (BitAction)(1)); // led DP
	}
	if (number == 1){
		GPIO_WriteBit(GPIOA, GPIO_Pin_12, (BitAction)(1)); // led A
		GPIO_WriteBit(GPIOB, GPIO_Pin_4, (BitAction)(0)); // led B
		GPIO_WriteBit(GPIOA, GPIO_Pin_15, (BitAction)(0)); // led C
		GPIO_WriteBit(GPIOB, GPIO_Pin_6, (BitAction)(1)); // led D
		GPIO_WriteBit(GPIOB, GPIO_Pin_7, (BitAction)(1)); // led E
		GPIO_WriteBit(GPIOA, GPIO_Pin_11, (BitAction)(1)); // led F
		GPIO_WriteBit(GPIOB, GPIO_Pin_3, (BitAction)(1)); // led G
		GPIO_WriteBit(GPIOB, GPIO_Pin_5, (BitAction)(1)); // led DP
	}
	if (number == 2){
		GPIO_WriteBit(GPIOA, GPIO_Pin_12, (BitAction)(0)); // led A
		GPIO_WriteBit(GPIOB, GPIO_Pin_4, (BitAction)(0)); // led B
		GPIO_WriteBit(GPIOA, GPIO_Pin_15, (BitAction)(1)); // led C
		GPIO_WriteBit(GPIOB, GPIO_Pin_6, (BitAction)(0)); // led D
		GPIO_WriteBit(GPIOB, GPIO_Pin_7, (BitAction)(0)); // led E
		GPIO_WriteBit(GPIOA, GPIO_Pin_11, (BitAction)(1)); // led F
		GPIO_WriteBit(GPIOB, GPIO_Pin_3, (BitAction)(0)); // led G
		GPIO_WriteBit(GPIOB, GPIO_Pin_5, (BitAction)(1)); // led DP
	}
	if (number == 3){
		GPIO_WriteBit(GPIOA, GPIO_Pin_12, (BitAction)(0)); // led A
		GPIO_WriteBit(GPIOB, GPIO_Pin_4, (BitAction)(0)); // led B
		GPIO_WriteBit(GPIOA, GPIO_Pin_15, (BitAction)(0)); // led C
		GPIO_WriteBit(GPIOB, GPIO_Pin_6, (BitAction)(0)); // led D
		GPIO_WriteBit(GPIOB, GPIO_Pin_7, (BitAction)(1)); // led E
		GPIO_WriteBit(GPIOA, GPIO_Pin_11, (BitAction)(1)); // led F
		GPIO_WriteBit(GPIOB, GPIO_Pin_3, (BitAction)(0)); // led G
		GPIO_WriteBit(GPIOB, GPIO_Pin_5, (BitAction)(1)); // led DP
	}
	if (number == 4){
		GPIO_WriteBit(GPIOA, GPIO_Pin_12, (BitAction)(1)); // led A
		GPIO_WriteBit(GPIOB, GPIO_Pin_4, (BitAction)(0)); // led B
		GPIO_WriteBit(GPIOA, GPIO_Pin_15, (BitAction)(0)); // led C
		GPIO_WriteBit(GPIOB, GPIO_Pin_6, (BitAction)(1)); // led D
		GPIO_WriteBit(GPIOB, GPIO_Pin_7, (BitAction)(1)); // led E
		GPIO_WriteBit(GPIOA, GPIO_Pin_11, (BitAction)(0)); // led F
		GPIO_WriteBit(GPIOB, GPIO_Pin_3, (BitAction)(0)); // led G
		GPIO_WriteBit(GPIOB, GPIO_Pin_5, (BitAction)(1)); // led DP
	}
	if (number == 5){
		GPIO_WriteBit(GPIOA, GPIO_Pin_12, (BitAction)(0)); // led A
		GPIO_WriteBit(GPIOB, GPIO_Pin_4, (BitAction)(1)); // led B
		GPIO_WriteBit(GPIOA, GPIO_Pin_15, (BitAction)(0)); // led C
		GPIO_WriteBit(GPIOB, GPIO_Pin_6, (BitAction)(0)); // led D
		GPIO_WriteBit(GPIOB, GPIO_Pin_7, (BitAction)(1)); // led E
		GPIO_WriteBit(GPIOA, GPIO_Pin_11, (BitAction)(0)); // led F
		GPIO_WriteBit(GPIOB, GPIO_Pin_3, (BitAction)(0)); // led G
		GPIO_WriteBit(GPIOB, GPIO_Pin_5, (BitAction)(1)); // led DP
	}
	if (number == 6){
		GPIO_WriteBit(GPIOA, GPIO_Pin_12, (BitAction)(0)); // led A
		GPIO_WriteBit(GPIOB, GPIO_Pin_4, (BitAction)(1)); // led B
		GPIO_WriteBit(GPIOA, GPIO_Pin_15, (BitAction)(0)); // led C
		GPIO_WriteBit(GPIOB, GPIO_Pin_6, (BitAction)(0)); // led D
		GPIO_WriteBit(GPIOB, GPIO_Pin_7, (BitAction)(0)); // led E
		GPIO_WriteBit(GPIOA, GPIO_Pin_11, (BitAction)(0)); // led F
		GPIO_WriteBit(GPIOB, GPIO_Pin_3, (BitAction)(0)); // led G
		GPIO_WriteBit(GPIOB, GPIO_Pin_5, (BitAction)(1)); // led DP
	}
	if (number == 7){
		GPIO_WriteBit(GPIOA, GPIO_Pin_12, (BitAction)(0)); // led A
		GPIO_WriteBit(GPIOB, GPIO_Pin_4, (BitAction)(0)); // led B
		GPIO_WriteBit(GPIOA, GPIO_Pin_15, (BitAction)(0)); // led C
		GPIO_WriteBit(GPIOB, GPIO_Pin_6, (BitAction)(1)); // led D
		GPIO_WriteBit(GPIOB, GPIO_Pin_7, (BitAction)(1)); // led E
		GPIO_WriteBit(GPIOA, GPIO_Pin_11, (BitAction)(1)); // led F
		GPIO_WriteBit(GPIOB, GPIO_Pin_3, (BitAction)(1)); // led G
		GPIO_WriteBit(GPIOB, GPIO_Pin_5, (BitAction)(1)); // led DP
	}
	if (number == 8){
		GPIO_WriteBit(GPIOA, GPIO_Pin_12, (BitAction)(0)); // led A
		GPIO_WriteBit(GPIOB, GPIO_Pin_4, (BitAction)(0)); // led B
		GPIO_WriteBit(GPIOA, GPIO_Pin_15, (BitAction)(0)); // led C
		GPIO_WriteBit(GPIOB, GPIO_Pin_6, (BitAction)(0)); // led D
		GPIO_WriteBit(GPIOB, GPIO_Pin_7, (BitAction)(0)); // led E
		GPIO_WriteBit(GPIOA, GPIO_Pin_11, (BitAction)(0)); // led F
		GPIO_WriteBit(GPIOB, GPIO_Pin_3, (BitAction)(0)); // led G
		GPIO_WriteBit(GPIOB, GPIO_Pin_5, (BitAction)(1)); // led DP
	}
	if (number == 9){
		GPIO_WriteBit(GPIOA, GPIO_Pin_12, (BitAction)(0)); // led A
		GPIO_WriteBit(GPIOB, GPIO_Pin_4, (BitAction)(0)); // led B
		GPIO_WriteBit(GPIOA, GPIO_Pin_15, (BitAction)(0)); // led C
		GPIO_WriteBit(GPIOB, GPIO_Pin_6, (BitAction)(0)); // led D
		GPIO_WriteBit(GPIOB, GPIO_Pin_7, (BitAction)(1)); // led E
		GPIO_WriteBit(GPIOA, GPIO_Pin_11, (BitAction)(0)); // led F
		GPIO_WriteBit(GPIOB, GPIO_Pin_3, (BitAction)(0)); // led G
		GPIO_WriteBit(GPIOB, GPIO_Pin_5, (BitAction)(1)); // led DP
	}
}






#ifdef  USE_FULL_ASSERT


/**
  * @brief  Reports the name of the source file and the source line number
  *   where the assert_param error has occurred.
  * @param  file: pointer to the source file name
  * @param  line: assert_param error line source number
  * @retval None
  */
void assert_failed(uint8_t* file, uint32_t line)
{ 
  /* User can add his own implementation to report the file name and line number,
     ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */


  /* Infinite loop */
  while (1)
  {}
}
#endif


/**
  * @}
  */

/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/