NUCLEO
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****/