PLACAS GENERICAS Y TIPO DISCOVERY y CHINAS PARA PROGRAMAR PROCESADORES STM32

La mas popular y la mas economica

PLACA STM32F103C8

Una descripcion de pines que puede facilitar la programacion es la siguiente

Y CON MAS DETALLE

El tablero llamado "Blue Pill" de China lo encuentra en AliExpress "STM32F103C8T6 board". Solo cuesta unos 2 €, un precio de explosión absoluto. Cuando se usan cabezales de clavijas extrafinas, la placa cabe en un zócalo DIP de 40 clavijas.

El firmware se puede instalar a través de USART1 con el cargador de arranque serie permanentemente instalado o mediante SWD con un adaptador ST-Link.

El puente Boot1 (= PB2) se puede usar en modo normal para sus propios fines.

Se recomienda volver a cargar el marco de la toma USB sensible. No puede alimentar la placa a través de USB y una fuente de alimentación de 5 V al mismo tiempo (cortocircuito). Sin embargo, un suministro adicional de 3.3V está bien.

La resistencia R10 a menudo se llena incorrectamente con 10k ohmios en lugar de los 1.5k ohmios correctos, lo que hace que el puerto USB no sea confiable. Para la corrección, también puede conectar una resistencia de 1.8k ohm en paralelo (de PA12 a 3.3V).

Si se utiliza el reloj de cuarzo de 32 kHz, debe quitar los pines en PC14 y PC15 para que vibre estable.

Se ha informado varias veces que esta placa se suministró inadvertidamente con "Protección de lectura" o "Protección contra escritura" habilitada en los "Bytes de opción". Estos se pueden eliminar con la utilidad ST-Link o el demostrador de cargador Flash en serie.

Placa de sistema mínima STM32F103VET6

Este tablero de China está disponible desde 9 €. Obviamente es una versión más grande de la placa "Blue Pill". No lo he intentado todavía

El firmware se puede instalar a través de USART1 o USB con el gestor de arranque permanentemente instalado o mediante SWD con un adaptador ST-Link.

El puente Boot1 (= PB2) se puede usar en modo normal para sus propios fines.

No puede alimentar la placa a través de USB y una fuente de alimentación de 5 V al mismo tiempo (cortocircuito). Sin embargo, un suministro adicional de 3.3V está bien.

Si se usa un USB, recomiendo verificar la resistencia de pull-up en PA12 (D +). Se muestra en el diagrama del circuito con 4.7k ohmios, pero debería ser de 1.5k ohmios.

Si se utiliza el reloj de cuarzo de 32 kHz, debe quitar los pines en PC14 y PC15 para que vibre estable.

Switchpan de la placa de sistema mínima STM32F103VET6

Datos eléctricos

Todos los chips STM32F1 se pueden operar con 2.0 a 3.6 voltios. El ADC requiere al menos 2,4 voltios y la interfaz USB solo funciona a 3,3V.

El consumo de energía es comparable a los microcontroladores de 8 bits. En el modo de parada, sin embargo, el consumo de corriente es mucho mayor con ~ 20μA. Por lo tanto, para el funcionamiento a batería a largo plazo se hace referencia a las series más económicas STM32L1 o L4.

Muchos pines de E / S toleran 5V. Para los modelos STM32F103, estos son: PA8-15, PB2-4, PB6-15, PC6-12, PD0-15, PE0-15, PF0-5, PF11-15, PG0-15.

Los pines de E / S tolerante a 5 V están protegidos contra el voltaje de entrada negativo por diodos de protección ESD. Estos toleran individualmente 5 mA, pero todos juntos solo un máximo de 25 mA. El flujo de corriente a través de sobrevoltaje por encima de 5.5V no está permitido.

Los pines de E / S tolerantes a 5V no están protegidos por diodos de protección contra ESD tanto contra tensión de entrada negativa como sobretensión (más alta que la tensión de alimentación). También aquí están individualmente 5mA, para todos juntos solo se permite un máximo de 25mA.

Las salidas se pueden cargar individualmente con 20 mA, los niveles lógicos válidos están garantizados hasta 8 mA. Sin embargo, todas las salidas solo pueden cargarse juntas con un máximo de 150 mA. En el modo de drenaje abierto, las salidas de tolerancia 5V pueden ser llevadas a 5V por resistencias externas. Las salidas no son a prueba de cortocircuitos.

Las resistencias internas de pull-up y pull-down suelen tener 40k ohms. Todos los pines de E / S suelen tener una capacidad de 5 pF.

El pin RST tiene una resistencia pull-up internamente y se puede extraer desde el chip mismo, así como desde el exterior a bajo. Los pulsos de restablecimiento generados internamente tienen al menos 20 μs de longitud.

Excepciones especiales

Los pines PC13, PC14 y PC15 no deben suministrar CC a alta ni baja a solo 3 mA. Además, solo pueden controlarse con un máximo de 2MHz y cargarse con un máximo de 30pF.

Los diodos de protección ESD de PA4, PA5, PC13, PC14 y PC15 no deben cargarse.

METODOS DE PROGRAMAR O TRANSFERIR CODIGO AL PROCESADOR

El metodo mas simple es aprovechar el Bootloader natural de todos los procesadores STM32 y atraves de un programita corto y un dongle USB se puede transferir el codigo compilado.

el metodo

para este metodo debemos bajar este programa

Otras variantes chinas

STM32F103VET6

SOPORTE ARDUINO  STM32F103V   SERIES

placas Genericas mas poderosas.

STM32F407VGT6 SOPORTADA POR ARDUINO

STM32F407VG

Características principales

Otras placas de este procesador

 

Para prosesadores de 8 bits usar st visual programmer o mejor este si los anteriores se cuelgan este tambien le sirve

Si los quiere programar en arduino visite este link

Descripcion de pines plaquitas de 8Bits

...........................................................................................................................................................................

METODO CON STLINK 32 (CLON Y OFICIAL JTAG) hay diversos ejemplos en la nube que seran hipervinculados aca.

Los pines pares se usan para los STM32 y los impares para STM8 (los de 8 bits)

para los de 32 bits y usamos ST-LINK chino cableamos los 4 pines: 3,3v,gnd,swclk,swdio

Para programar con la interfaz JTAG se pone toda la correa solo si la placa china lo admite o la DISCOVERY

La interfaz con modulo JTAG (oficial STM) tiene la siguiente distribucion

Procesadores compatibles

Supported Devices

Microcontrollers supported by STVP release 3.2.8:

Product line

Microcontroller

STM32

STM32F100xx, STM32F101xx, STM32F102xx, STM32F103xx, STM32F105xx, STM32F107xx, STM32F2xxx, STM32F4xxx,

STM32L15xx6, STM32L15xx8,STM32L15xxB, STM32L151xC, STM32L151xD, STM32L152xC, STM32L152xD, STM32L162xD,

STM32TS60,

STM32W108C8, STM32W108xB, STM32W108xC, STM32W108xZ

STM8

STM8AF51x, STM8AF52x, STM8AF61x, STM8AF62x,STM8AH51x, STM8AH61x, 

STM8S003K3, STM8S003F3, STM8S005C6, STM8S005K6, STM8S007C8, STM8S103xx, STM8S105xx, STM8S207xx, STM8S208xx, STM8S903F3, STM8S903K3, 

STM8L101xx, STM8L15x, STM8L16x,

STM8TL52x4,STM8TL53x4

PLATAFORMAS DE PROGRAMACION COMUNES

ARDUINO: Arduino facilita la programacion de programas muy simples pero nunca explotara usted todo el potencial de estos procesadores

MBED: Con una aproximacion a una placa discovery que adopta mbed es posible generar codigo compilado que si transfiere al procesador con una unidad de desarrollo como los metodos de programacion se puede hacer algo, Igual que arduino no se explotara todo el potencial del procesador STM32. debe instalar este programa de Gravado

libreria mbed para 108C para i2c.

incluye hall.

con ds1820 ejemplo

conversor A/D

nrf2401

con sd card placas 407

sd card con 103

placas 407 chinas en mbed

Todos los ejemplos en 103

dispositivo USB

Con display grafico TFT Display ILI9341

aplicacion USB

usb serial sobre 103

uarth

MIKROE: para ARM: es intuitivo y facil, pero tiene unos detallitos que se deben considerar, necesita emular el dongle con esto instale los dos

KEIL:debe pagar por usarla es muy poderosa y totalmente integrada a los procesadores STM32 conecta con el generador de inicializacion CubeSTM32 el demo hace cosas aceptables y puede comprobar cubeX

ATOLLIC: (gratis ahora con ususarios de STM32) si La compañia ST compro los derechos y el programa es cedido a los usuarios desde su pagina webb, esto es nuevo y se debe iniciar su apropiacion como una comunidad para compartir proyectos como en mbed.org. Bajar todos los documentos y leerlos el compilador tambien. Vea los videos de youtube

PAGINA ALEMANA QUE HACE UN COMPLETO ESTUDIO DE ESTOS PROCESADORES Y LA CONSIDERO MUY INTERESANTE VALE LA PENA

LIBRERIAS DE MIKROE PARA ARM CON EL PROCESADOR STM32

AHORA PROGRAMEMOS ALGO EN STM32 CON MIKROE PARA ARM

Accionar un LCD Con un STM32F103VE

// LCD module connections
sbit LCD_RS at GPIOD_ODR.B2;
sbit LCD_EN at GPIOD_ODR.B3;
sbit LCD_D4 at GPIOD_ODR.B4;
sbit LCD_D5 at GPIOD_ODR.B5;
sbit LCD_D6 at GPIOD_ODR.B6;
sbit LCD_D7 at GPIOD_ODR.B7;
// End LCD module connections

char txt1[] = "mikroElektronika";
char txt2[] = "STM32";
char txt3[] = "Lcd4bit";
char txt4[] = "example";

char i; // Loop variable

void Move_Delay() { // Function used for text moving
Delay_ms(750); // You can change the moving speed here
}

void main(){
Lcd_Init(); // Initialize LCD

Lcd_Cmd(_LCD_CLEAR); // Clear display
Lcd_Cmd(_LCD_CURSOR_OFF); // Cursor off
Lcd_Out(1,6,txt3); // Write text in first row

Lcd_Out(2,6,txt4); // Write text in second row
Delay_ms(2000);
Lcd_Cmd(_LCD_CLEAR); // Clear display

Lcd_Out(1,1,txt1); // Write text in first row
Lcd_Out(2,4,txt2); // Write text in second row

Delay_ms(2000);

// Moving text
for(i=0; i<4; i++) { // Move text to the right 4 times
Lcd_Cmd(_LCD_SHIFT_RIGHT);
Move_Delay();
}

while(1) { // Endless loop
for(i=0; i<7; i++) { // Move text to the left 7 times
Lcd_Cmd(_LCD_SHIFT_LEFT);
Move_Delay();
}

for(i=0; i<7; i++) { // Move text to the right 7 times
Lcd_Cmd(_LCD_SHIFT_RIGHT);
Move_Delay();
}
}
}

Ojo con esta interpretación
sbit LCD_RS at GPIOD_ODR.B2; es puerto D2

 

Segundo ejemplo leer un pulsador
#define boton GPIOA_IDR.B0
#define led GPIOC_ODR.B13 //el led azul de la targeta

void main() {
//configura PD15 como salida
GPIO_Digital_Output(&GPIOC_BASE,_GPIO_PINMASK_13);
//configura PA0 como entrada
GPIO_Digital_Input(&GPIOA_BASE,_GPIO_PINMASK_0);
GPIOD_ODR.B15=1;
//inicia con led encendido

while(1){
if(boton==0){ //el pin es cero
led=~led; //cambia el estado de PD15
while(boton==0);//espera a que PA0 pase a 1
}
}
}

PWM
//Let's Electronic By Aymen Lachkhem
// www.letselectronic.blogspot.com
// Hello in this tutoriel we are going to use 4 buttons (digital Input), the first two will increase and decrease the current duty for the
// first Led and the second two will make the same thing with the other Led.
unsigned int current_duty, old_duty, current_duty1, old_duty1;
unsigned int pwm_period1, pwm_period2;

void InitMain() {
GPIO_Digital_Input (&GPIOA_BASE, _GPIO_PINMASK_3 | _GPIO_PINMASK_4 | _GPIO_PINMASK_5 | _GPIO_PINMASK_6); // configure PORTA pins as input
}

void main() {
InitMain();
current_duty = 100; // initial value for current_duty
current_duty1 = 100; // initial value for current_duty1

pwm_period1 = PWM_TIM1_Init(5000);
pwm_period2 = PWM_TIM4_Init(5000);

PWM_TIM1_Set_Duty(current_duty, _PWM_NON_INVERTED, _PWM_CHANNEL1); // Set current duty for PWM_TIM1
PWM_TIM4_Set_Duty(current_duty1, _PWM_NON_INVERTED, _PWM_CHANNEL2); // Set current duty for PWM_TIM4

PWM_TIM1_Start(_PWM_CHANNEL1, &_GPIO_MODULE_TIM1_CH1_PE9);

PWM_TIM4_Start(_PWM_CHANNEL2, &_GPIO_MODULE_TIM4_CH2_PD13);

while (1) { // endless loop
if (GPIOA_IDR.B3) { // button on RA3 pressed
Delay_ms(1);
current_duty = current_duty + 5; // increment current_duty
if (current_duty > pwm_period1) { // if we increase current_duty greater then possible pwm_period1 value
current_duty = 0; // reset current_duty value to zero
}
PWM_TIM1_Set_Duty(current_duty, _PWM_NON_INVERTED, _PWM_CHANNEL1); // set newly acquired duty ratio
}

if (GPIOA_IDR.B4) { // button on RA4 pressed
Delay_ms(1);
current_duty = current_duty - 5; // decrement current_duty
if (current_duty > pwm_period1) { // if we decrease current_duty greater then possible pwm_period1 value (overflow)
current_duty = pwm_period1; // set current_duty to max possible value
}
PWM_TIM1_Set_Duty(current_duty, _PWM_NON_INVERTED, _PWM_CHANNEL1); // set newly acquired duty ratio
}

if (GPIOA_IDR.B5) { // button on RA5 pressed
Delay_ms(1);
current_duty1 = current_duty1 + 5; // increment current_duty
if (current_duty1 > pwm_period2) { // if we increase current_duty1 greater then possible pwm_period2 value
current_duty1 = 0; // reset current_duty1 value to zero
}
PWM_TIM4_Set_Duty(current_duty1, _PWM_NON_INVERTED, _PWM_CHANNEL2); // set newly acquired duty ratio
}

if (GPIOA_IDR.B6) { // button on RA6 pressed
Delay_ms(1);
current_duty1 = current_duty1 - 5; // decrement current_duty
if (current_duty1 > pwm_period2) { // if we decrease current_duty1 greater then possible pwm_period1 value (overflow)
current_duty1 = pwm_period2; // set current_duty to max possible value
}
PWM_TIM4_Set_Duty(current_duty1, _PWM_NON_INVERTED, _PWM_CHANNEL2);
}

Delay_ms(1); // slow down change pace a little
}
}