Autor Tema: Duda GPIO_Write() en Coocox  (Leído 2845 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado bitpic

  • PIC18
  • ****
  • Mensajes: 402
    • BitPIC
Duda GPIO_Write() en Coocox
« en: 28 de Diciembre de 2012, 15:20:13 »
Hola,

Tengo una duda, tengo un bus de 8 bits de una pantalla LCD conectados a un bus de 16 bits de un STM32. El bus esta conectado a los bits de mayor peso, del bit 8  al bit 15.

Si quiero poner estos 8 bits a nivel 1 sin que afecte a los bits de menor peso ¿es suficiente con hacer lo siguiente?

GPIO_Write(GPIOB,0xFF);

o habría que hacerlo así:

dato = 0xFF;
dato = dato << 8;
GPIO_Write(GPIOB,dato);

Estoy intentando hacer una librería para un LCD gráfico con controlador ST7565.

Saludos,
BitPIC

Desconectado Suky

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Duda GPIO_Write() en Coocox
« Respuesta #1 en: 28 de Diciembre de 2012, 18:56:39 »
La función escribe el valor de 16-bits sobre el puerto. Si quieres escribir en los 8 bits mas significativos deberías hacer:

Código: C
  1. GPIO_Write(GPIOB,(uint16_t)Dato<<8);

Pero si no quieres que se modifique lo que tienen los 8 bit menos significativos y configurados como salida:

Código: C
  1. GPIO_Write(GPIOB,(GPIO_Read(GPIOB)&0x00FF)|((uint16_t)Dato<<8));

En los micros STM32 podes estudiar el FSMC, que es para trabajar con memorias y LCDs.


Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado bitpic

  • PIC18
  • ****
  • Mensajes: 402
    • BitPIC
Re: Duda GPIO_Write() en Coocox
« Respuesta #2 en: 29 de Diciembre de 2012, 13:17:43 »
Hola Suky,

Voy a probar a ver que tal como dices tu. Estoy intentando que me aparezca un simple pixel y no hay manera, quizá es que cuando intento mandar el comando correspondiente por los pines de nivel alto que es donde tengo el bus de datos estoy borrando los de nivel bajo que son los que controlan los bits de R/W, E, CS y demás.

Entiendo que lo que yo estaba haciendo es cargar el valor 0xFF y el FF se colocaba en los bits de menor peso de "Dato" y por tanto lo que estaba haciendo en realidad es escribir en los bits de menor peso del puerto B. ¿Si escribo directamente GPIO_Write(GPIOB,0xFF); también escribo en los bits de menor peso o en este caso estoy escribiendo en los de mayor peso? ¿Haciéndolo así borro los de menor peso o sea seria equivalente a GPIO_Write(GPIOB,0xFF00); o solo se escriben en los de mayor peso?

En cuanto al FSMC el micro que yo uso no tiene. Uso el STM32F103RC, este micro solo tiene los puertors A,B Y C y si no me equivoco el FSMC viene en los puertos E de los micros más grandes de este modelo. Como estoy iniciándome con estos micros con el que uso ya me sobra y además es el único que tengo de momento, ahora solo falta que consiga hacer funcionar el LCD.

Nunca he usado un FSMC, ¿los PIC llevan? ¿es fácil de usar a la hora de controlar displays LCD o graficos? ¿El FSMC es un controlador de puerto de 8, 16 y 32 bits para controlar cualquier dispositivo que se comunique con un bus paralelo?

Muchas gracias, siempre estas ahí cuando se te necesita tanto en PICs como en ARM como en lo que te echen... que envidia me das ejejej  :oops:

Un saludo.
« Última modificación: 29 de Diciembre de 2012, 13:26:29 por bitpic »
BitPIC

Desconectado Suky

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Duda GPIO_Write() en Coocox
« Respuesta #3 en: 29 de Diciembre de 2012, 18:24:44 »
Si haces GPIO_Write(GPIOB,0xFF), escribes 0xFF en 0-7 y 0x00 en 8-15. Ahora si haces GPIO_Write(GPIOB,0xFF00), es al revés. Para mantener el estado de los bits 0-7, hay que leerlo y solo modificar los altos.

El FSMC es un controlador de puerto paralelo muy flexible que permite controlar memorias SRAM, NOR Flash, NAND Flash y LCDs, que no son mas que memorias  ;-) Yo no he programado esta característica, sino que los he estudiado por necesidad, para armar el esquema de una placa.


Saludos!
No contesto mensajes privados, las consultas en el foro


 

anything