日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

STM32f103——ILI9341

發(fā)布時(shí)間:2023/12/20 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 STM32f103——ILI9341 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

STM32f103 —— ILI9341


#ifndef ILI9341_H_ #define ILI9341_H_#include "type.h"//====================================TFT ILI9341===================================== #define ILI9341_SPI SPI1#define ILI9341_MOSI_GRP GPIOA #define ILI9341_MOSI_IDX GPIO_Pin_7 #define ILI9341_MOSI_LOW() GPIO_ResetBits(ILI9341_MOSI_GRP, ILI9341_MOSI_IDX) #define ILI9341_MOSI_HIGH() GPIO_SetBits(ILI9341_MOSI_GRP, ILI9341_MOSI_IDX)#define ILI9341_RS_GRP GPIOA #define ILI9341_RS_IDX GPIO_Pin_3 #define ILI9341_RS_LOW() GPIO_ResetBits(ILI9341_RS_GRP, ILI9341_RS_IDX) #define ILI9341_RS_HIGH() GPIO_SetBits(ILI9341_RS_GRP, ILI9341_RS_IDX)#define ILI9341_CS_GRP GPIOA #define ILI9341_CS_IDX GPIO_Pin_4 #define ILI9341_CS_LOW() GPIO_ResetBits(ILI9341_CS_GRP, ILI9341_CS_IDX) #define ILI9341_CS_HIGH() GPIO_SetBits(ILI9341_CS_GRP, ILI9341_CS_IDX)#define ILI9341_CLK_GRP GPIOA #define ILI9341_CLK_IDX GPIO_Pin_5 #define ILI9341_CLK_LOW() GPIO_ResetBits(ILI9341_CLK_GRP, ILI9341_CS_IDX) #define ILI9341_CLK_HIGH() GPIO_SetBits(ILI9341_CLK_IDX, ILI9341_CS_IDX)#define ILI9341_ENLED_GRP GPIOB #define ILI9341_ENLED_IDX GPIO_Pin_2 #define ILI9341_ENLED_LOW() GPIO_ResetBits(ILI9341_ENLED_GRP, ILI9341_ENLED_IDX) #define ILI9341_ENLED_HIGH() GPIO_SetBits(ILI9341_ENLED_GRP, ILI9341_ENLED_IDX)#define ILI9341_RESET_GRP GPIOB #define ILI9341_RESET_IDX GPIO_Pin_0 #define ILI9341_RESET_LOW() GPIO_ResetBits(ILI9341_RESET_GRP, ILI9341_RESET_IDX) #define ILI9341_RESET_HIGH() GPIO_SetBits(ILI9341_RESET_GRP, ILI9341_RESET_IDX)void ILI9341Config(void); void ILI9341SetCursor(uint16_t x, uint16_t y); void ILI9341SetColor(uint16_t rgb565); void ILI9341WriteData(uint8_t high,uint8_t low); #include "ili9341.h" #include "delay.h"/* ILI9341液晶的SPI GPIO初始化 */ static void ili9341_spi_init(SPI_TypeDef* SPIx, uint16_t spi_baud_div) {SPI_InitTypeDef SPI_InitStructure;GPIO_InitTypeDef GPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB, ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE);/* clk和mosi是復(fù)用功能,其它引腳是通用推挽輸出 */GPIO_InitStructure.GPIO_Pin = ILI9341_MOSI_IDX | ILI9341_CLK_IDX;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;GPIO_Init(ILI9341_MOSI_GRP, &GPIO_InitStructure);GPIO_InitStructure.GPIO_Pin = ILI9341_CS_IDX | ILI9341_RS_IDX;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;GPIO_Init(ILI9341_CS_GRP, &GPIO_InitStructure);GPIO_InitStructure.GPIO_Pin = ILI9341_ENLED_IDX | ILI9341_RESET_IDX;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;GPIO_Init(ILI9341_RESET_GRP, &GPIO_InitStructure);SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;SPI_InitStructure.SPI_Mode = SPI_Mode_Master;SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;SPI_InitStructure.SPI_CPOL = SPI_CPOL_High;SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge;SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_8;SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;SPI_InitStructure.SPI_CRCPolynomial = 7;SPI_Init(SPIx, &SPI_InitStructure);SPI_Cmd(SPIx, ENABLE); }static void ili9341_spi_config(void) {ili9341_spi_init(ILI9341_SPI, 0x02);ILI9341_ENLED_HIGH(); /* 點(diǎn)亮LCD */ILI9341_CS_HIGH(); /* 關(guān)閉失能cs */ILI9341_RESET_HIGH(); /* 復(fù)位引腳制高失能 */ILI9341_RS_HIGH(); /* RS制高 */ }/* spi讀寫數(shù)據(jù) */ static uint8_t ili9341_read_write_byte(uint8_t data) {while (SPI_I2S_GetFlagStatus(ILI9341_SPI, SPI_I2S_FLAG_TXE) == RESET);SPI_I2S_SendData(ILI9341_SPI, data); while (SPI_I2S_GetFlagStatus(ILI9341_SPI, SPI_I2S_FLAG_RXNE) == RESET);return SPI_I2S_ReceiveData(ILI9341_SPI); //返回通過(guò)SPIx最近接收的數(shù)據(jù) }/* 寫命令 */ static void ili9341_cmd_write(uint8_t cmd) {ILI9341_RS_LOW();ILI9341_CS_LOW();ili9341_read_write_byte(cmd);ILI9341_CS_HIGH(); }/* 寫數(shù)據(jù) */ static void ili9341_data_write(uint8_t data) {ILI9341_RS_HIGH();ILI9341_CS_LOW();ili9341_read_write_byte(data);ILI9341_CS_HIGH(); }/* 寫16位數(shù)據(jù) */ void ili9341_data_wtite_16(uint8_t high, uint8_t low) {ILI9341_RS_HIGH();ILI9341_CS_LOW();ili9341_read_write_byte(high);ILI9341_CS_HIGH();ILI9341_RS_HIGH();ILI9341_CS_LOW();ili9341_read_write_byte(low);ILI9341_CS_HIGH(); }/* 初始化9341液晶,根據(jù)手冊(cè)時(shí)序 */ static void ili9341_init(void) {ILI9341_RESET_LOW();delay_ms(10);ILI9341_RESET_HIGH();delay_ms(120);//************* Start Initial Sequence **********//ili9341_cmd_write(0xCB);ili9341_data_write (0x39);ili9341_data_write (0x2C);ili9341_data_write (0x00);ili9341_data_write (0x34);ili9341_data_write (0x02);ili9341_cmd_write(0xCF);ili9341_data_write (0x00);ili9341_data_write (0xC1);ili9341_data_write (0X30);ili9341_cmd_write(0xE8);ili9341_data_write (0x85);ili9341_data_write (0x00);ili9341_data_write (0x78);ili9341_cmd_write(0xEA);ili9341_data_write (0x00);ili9341_data_write (0x00);ili9341_cmd_write(0xED);ili9341_data_write (0x64);ili9341_data_write (0x03);ili9341_data_write (0X12);ili9341_data_write (0X81);ili9341_cmd_write(0xF7);ili9341_data_write(0x20);ili9341_cmd_write(0xC0); // Power controlili9341_data_write (0x23); // VRH[5:0]ili9341_cmd_write(0xC1); // Power controlili9341_data_write (0x10); // SAP[2:0];BT[3:0]ili9341_cmd_write(0xC5); // VCM controlili9341_data_write (0x3e);ili9341_data_write (0x28);ili9341_cmd_write(0xC7); // VCM control2ili9341_data_write (0X86);ili9341_cmd_write(0x36); // Memory Access Controlili9341_data_write (0xe8);ili9341_cmd_write(0X2A);ili9341_data_write(0x00); // startili9341_data_write(0x00);ili9341_data_write(0x01); // endili9341_data_write(0x3F);ili9341_cmd_write(0X2B);ili9341_data_write(0x00); // startili9341_data_write(0x00);ili9341_data_write(0x00); // endili9341_data_write(0xEF);ili9341_cmd_write(0x3A);ili9341_data_write (0x55);ili9341_cmd_write(0xB1);ili9341_data_write (0x00);ili9341_data_write (0x18);ili9341_cmd_write(0xB6); // Display Function Controlili9341_data_write (0x08);ili9341_data_write (0x82);ili9341_data_write (0x27);ili9341_cmd_write(0xF2); // 3Gamma Function Disableili9341_data_write (0x00);ili9341_cmd_write(0x26); // Gamma curve selectedili9341_data_write (0x01);ili9341_cmd_write(0xE0); // Set Gammaili9341_data_write (0x0F);ili9341_data_write (0x31);ili9341_data_write (0x2b);ili9341_data_write (0x0c);ili9341_data_write (0x0e);ili9341_data_write (0x08);ili9341_data_write (0x4e);ili9341_data_write (0Xf1);ili9341_data_write (0x37);ili9341_data_write (0x07);ili9341_data_write (0x10);ili9341_data_write (0x03);ili9341_data_write (0x0e);ili9341_data_write (0x09);ili9341_data_write (0x00);ili9341_cmd_write(0XE1); // Set Gammaili9341_data_write (0x00);ili9341_data_write (0x0e);ili9341_data_write (0x14);ili9341_data_write (0x03);ili9341_data_write (0x11);ili9341_data_write (0x07);ili9341_data_write (0x31);ili9341_data_write (0xc1);ili9341_data_write (0x48);ili9341_data_write (0x08);ili9341_data_write (0x0f);ili9341_data_write (0x0C);ili9341_data_write (0x31);ili9341_data_write (0x36);ili9341_data_write (0x0f);ili9341_cmd_write(0x11); // Exit Sleepdelay_ms(120);ili9341_cmd_write(0x29); // Display onili9341_cmd_write(0x2c); }//================================================================= /* ILI9341配置:GPIO配置,液晶初始化 */ void ILI9341Config(void) {ili9341_spi_config(); /* 配置ILI9341GPIO和點(diǎn)亮屏 */ili9341_init(); /* ILI9341液晶初始化 */ }void ILI9341SetColor(uint16_t rgb565) {uint8_t H;uint8_t L;H = (rgb565 & 0xFF00) >> 8;L = (rgb565 & 0x00FF);WatchdogFeed();ili9341_data_wtite_16(H, L); }void ILI9341SetCursor(uint16_t x, uint16_t y) {ili9341_cmd_write(0x2a);ili9341_data_wtite_16(x >> 8, x);ili9341_cmd_write(0x2b);ili9341_data_wtite_16(y >> 8, y);ili9341_cmd_write(0x2c); }void ILI9341WriteData(uint8_t high, uint8_t low) {ili9341_data_wtite_16(high, low); } struct grap_char {uint16_t x1; /*字的起始位置的X軸*/uint16_t y1; /*字的起始位置的Y軸*/uint8_t code[2]; /*要顯示的內(nèi)容*/uint16_t rgb565; /*顯示的前景色*/uint16_t blkrgb565; /*顯示的背景色*/ }; // 描點(diǎn)int grap_xy(int16_t x1, int16_t y1, int16_t x2, int16_t y2, int16_t blkrgb565) // 刷屏 {int16_t i;int16_t j;if (y2 > MAX_POSY ||x2 > MAX_POSX ||x1 > MAX_POSX ||y1 > MAX_POSY ||x1 >= x2 ||y1 > y2){return 0;}for (j = y1; j < y2; j++){ILI9341SetCursor(x1, j);for (i = x1; i < x2; i++){ILI9341SetColor(blkrgb565);}}return 1; }

總結(jié)

以上是生活随笔為你收集整理的STM32f103——ILI9341的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。