深圳福田做網站視覺傳達設計最好的公司
鶴壁市浩天電氣有限公司
2026/01/24 08:58:27
深圳福田做網站,視覺傳達設計最好的公司,自建網站免費,wordpress 引用使用三種刷屏方式來感受不同的刷屏體驗#xff0c;因為GD32F103的SPI速度有限#xff0c;所以刷屏速度不會很快#xff0c;但是可以直觀對比不同速度下的刷屏。
第一種
void main_lcd_fill_0(void)
{uint16_t x, y;for (y 0; y LCD_H; y){for (x 0; x LCD_W; …使用三種刷屏方式來感受不同的刷屏體驗因為GD32F103的SPI速度有限所以刷屏速度不會很快但是可以直觀對比不同速度下的刷屏。第一種void main_lcd_fill_0(void) { uint16_t x, y; for (y 0; y LCD_H; y) { for (x 0; x LCD_W; x) { drv_lcd_draw_point(x, y, 0x001F); } } }直接使用畫點函數一個點一個點畫刷屏速度是最慢。第二種void main_lcd_fill_1(uint16_t xsta, uint16_t ysta, uint16_t xend, uint16_t yend, uint16_t color) { uint16_t i, j; drv_lcd_address_set(xsta, ysta, xend - 1, yend - 1); LCD_CS_CLR(); for (i ysta; i yend; i) { for (j xsta; j xend; j) { drv_spi0_read_write(color 8); drv_spi0_read_write(color); } } LCD_CS_SET(); }設置好顯示區(qū)域然后一次性通過硬件SPI發(fā)送數據減少了每次都需要設置一次顯示區(qū)域速度比第一種快。第三種uint8_t arr_buff[2048] {0}; void main_lcd_fill_2(uint16_t xsta, uint16_t ysta, uint16_t xend, uint16_t yend, uint16_t color) { for (uint16_t i 0; i 2048; i 2) { arr_buff[i 0] color 8; arr_buff[i 1] color; } drv_lcd_address_set(xsta, ysta, xend - 1, yend - 1); LCD_CS_CLR(); for (uint8_t i 0; i 75; i) { drv_spi0_dma_transmit(arr_buff, 2048); } LCD_CS_SET(); }在第二種的基礎上調用了DMA發(fā)送速度是最快的。主函數實現(xiàn)#include main.h void main_lcd_fill_0(void) { uint16_t x, y; for (y 0; y LCD_H; y) { for (x 0; x LCD_W; x) { drv_lcd_draw_point(x, y, 0x001F); } } } void main_lcd_fill_1(uint16_t xsta, uint16_t ysta, uint16_t xend, uint16_t yend, uint16_t color) { uint16_t i, j; drv_lcd_address_set(xsta, ysta, xend - 1, yend - 1); LCD_CS_CLR(); for (i ysta; i yend; i) { for (j xsta; j xend; j) { drv_spi0_read_write(color 8); drv_spi0_read_write(color); } } LCD_CS_SET(); } uint8_t arr_buff[2048] {0}; void main_lcd_fill_2(uint16_t xsta, uint16_t ysta, uint16_t xend, uint16_t yend, uint16_t color) { for (uint16_t i 0; i 2048; i 2) { arr_buff[i 0] color 8; arr_buff[i 1] color; } drv_lcd_address_set(xsta, ysta, xend - 1, yend - 1); LCD_CS_CLR(); for (uint8_t i 0; i 75; i) { drv_spi0_dma_transmit(arr_buff, 2048); } LCD_CS_SET(); } // 外設初始化 void main_driver_init(void) { drv_usart_init(); drv_timer_init(); drv_spi0_init(); drv_lcd_init(); // main_lcd_fill_0(); // main_lcd_fill_1(0, 0, LCD_W, LCD_H, 0x001f); main_lcd_fill_2(0, 0, LCD_W, LCD_H, 0x001f); } void main_delay_ms(uint32_t value) { for (uint32_t i 0; i value; i) { // 1ms for (uint16_t j 0; j 15428; j) { __NOP(); } } } // 主循環(huán) int main(void) { nvic_priority_group_set(NVIC_PRIGROUP_PRE4_SUB0); main_driver_init(); printfk(LOG, init ok
); while (1) { printfk(LOG, ...
); main_delay_ms(1000); } } void TIMER4_IRQHandler(void) { if (SET timer_interrupt_flag_get(TIMER4, TIMER_INT_FLAG_UP)) { timer_interrupt_flag_clear(TIMER4, TIMER_INT_FLAG_UP); } } void USART0_IRQHandler(void) { if (RESET ! usart_interrupt_flag_get(USART0, USART_INT_FLAG_RBNE)) { usart_interrupt_flag_clear(USART0, USART_INT_FLAG_RBNE); } if (RESET ! usart_interrupt_flag_get(USART0, USART_INT_FLAG_IDLE)) { usart_interrupt_flag_clear(USART0, USART_INT_FLAG_IDLE); } } void USART2_IRQHandler(void) { if (RESET ! usart_interrupt_flag_get(USART2, USART_INT_FLAG_RBNE)) { usart_interrupt_flag_clear(USART2, USART_INT_FLAG_RBNE); } if (RESET ! usart_interrupt_flag_get(USART2, USART_INT_FLAG_IDLE)) { usart_interrupt_flag_clear(USART2, USART_INT_FLAG_IDLE); } }使用DMA方式進行刷屏是最快的SPI方式比較適合驅動小屏幕大屏最好換其他接口的顯示屏。最小顯示屏項目模板如下后期就在這個基礎上移植LVGL。--end--