- static void gpio_config()
- {
- gpio_init_type gpio_initstructure;
- crm_periph_clock_enable(CRM_GPIOA_PERIPH_CLOCK, TRUE);
- gpio_pin_mux_config(GPIOA, GPIO_PINS_SOURCE5, GPIO_MUX_0);
- gpio_pin_mux_config(GPIOA, GPIO_PINS_SOURCE7, GPIO_MUX_0);
- gpio_default_para_init(&gpio_initstructure);
- //SCK
- gpio_initstructure.gpio_out_type = GPIO_OUTPUT_PUSH_PULL;
- gpio_initstructure.gpio_pull = GPIO_PULL_DOWN;
- gpio_initstructure.gpio_mode = GPIO_MODE_MUX;
- gpio_initstructure.gpio_drive_strength = GPIO_DRIVE_STRENGTH_STRONGER;
- gpio_initstructure.gpio_pins = GPIO_PINS_5;
- gpio_init(GPIOA, &gpio_initstructure);
- //MOSI
- gpio_initstructure.gpio_out_type = GPIO_OUTPUT_PUSH_PULL;
- gpio_initstructure.gpio_pull = GPIO_PULL_UP;
- gpio_initstructure.gpio_mode = GPIO_MODE_MUX;
- gpio_initstructure.gpio_drive_strength = GPIO_DRIVE_STRENGTH_STRONGER;
- gpio_initstructure.gpio_pins = GPIO_PINS_7;
- gpio_init(GPIOA, &gpio_initstructure);
-
- // RST/DC/CS
- gpio_initstructure.gpio_out_type = GPIO_OUTPUT_PUSH_PULL;
- gpio_initstructure.gpio_mode = GPIO_MODE_OUTPUT;
- gpio_initstructure.gpio_pull = GPIO_PULL_NONE;
-
- gpio_initstructure.gpio_pins = GPIO_PINS_3|GPIO_PINS_1|GPIO_PINS_2;
- gpio_init(GPIOA, &gpio_initstructure);
- }
SPI外设的配置
- static void spi_config(void)
- {
- spi_init_type spi_init_struct;
- crm_periph_clock_enable(CRM_SPI1_PERIPH_CLOCK, TRUE);
- spi_default_para_init(&spi_init_struct);
- spi_init_struct.transmission_mode = SPI_TRANSMIT_HALF_DUPLEX_TX;
- spi_init_struct.master_slave_mode = SPI_MODE_MASTER;
- spi_init_struct.mclk_freq_division = SPI_MCLK_DIV_2;
- spi_init_struct.first_bit_transmission = SPI_FIRST_BIT_MSB;
- spi_init_struct.frame_bit_num = SPI_FRAME_8BIT;
- spi_init_struct.clock_polarity = SPI_CLOCK_POLARITY_HIGH;
- spi_init_struct.clock_phase = SPI_CLOCK_PHASE_2EDGE;
- spi_init_struct.cs_mode_selection = SPI_CS_SOFTWARE_MODE;
- spi_init(SPI1, &spi_init_struct);
-
- spi_half_duplex_direction_set(SPI1,SPI_HALF_DUPLEX_DIRECTION_TX);
- spi_enable(SPI1, TRUE);
- }
与ST7735库函数底层接口的映射
- void ST7735_delay(uint8_t i)
- {
- delay_us(i);
- }
- void ST7735_SPI_SendByte(uint8_t byte)
- {
- // 判断是否可以继续发送放在之后判断可以避免CS拉高后还没发送结束。可以确保每一次发送都是成功的。
- while(spi_i2s_flag_get(ST7735_SPI, SPI_I2S_TDBE_FLAG) == RESET){};
- spi_i2s_data_transmit(ST7735_SPI, byte);
- }
- void ST7735_SPI_RST_SetLow(void)
- {
- gpio_bits_write(ST7735_RST_GPIO_Port,ST7735_RST_Pin,FALSE);
- }
- void ST7735_SPI_RST_SetHigh(void)
- {
- gpio_bits_write(ST7735_RST_GPIO_Port,ST7735_RST_Pin,TRUE);
- }
- void ST7735_SPI_CS_SetLow(void)
- {
- gpio_bits_write(ST7735_CS_GPIO_Port,ST7735_CS_Pin,FALSE);
-
- }
- void ST7735_SPI_CS_SetHigh(void)
- {
- gpio_bits_write(ST7735_CS_GPIO_Port,ST7735_CS_Pin,TRUE);
- }
- void ST7735_SPI_DC_SetLow(void)
- {
- gpio_bits_write(ST7735_DC_GPIO_Port,ST7735_DC_Pin,FALSE);
- }
- void ST7735_SPI_DC_SetHigh(void)
- {
- gpio_bits_write(ST7735_DC_GPIO_Port,ST7735_DC_Pin,TRUE);
- }
编写测试主函数
函数中配合板载的LED闪烁。
- int main(void)
- {
- __IO uint32_t index = 0;
- system_clock_config();
- at32_board_init();
- gpio_config();
- spi_config();
-
- for(int i=0;i<5;i++)
- {
- at32_led_on(LED2);
- delay_ms(100);
- at32_led_off(LED2);
- delay_ms(100);
- }
- ST7735_Init();
- ST7735_FillScreen(ST7735_BLACK);
- //针对0.96寸屏幕y的参数需要偏移24
- // ST7735_DrawRectangle(0,24,160,80,ST7735_BLUE);
- ST7735_DrawRoundRect(0,24,160,80,5,ST7735_BLUE);//绘制带圆角方框
- ST7735_DrawHLine(1,24+20,158,ST7735_CYAN);//绘制横线
- ST7735_DrawHLine(1,24+50,158,ST7735_CYAN);
- ST7735_DrawVLine(65-1,24+1,78,ST7735_CYAN); //绘制竖线
- ST7735_FillRectangle(70,24+6,10,8,ST7735_MAGENTA);
- ST7735_DrawRectangle(85,24+6,11,8,ST7735_BLUE);
- for(int i=1;i<=4;i++)
- {
- ST7735_DrawPixel(85+2*i,24+6+3,ST7735_YELLOW);
- ST7735_DrawPixel(85+2*i,24+6+4,ST7735_YELLOW);
- }
- ST7735_DrawCircle(106,24+10,5,ST7735_YELLOW);
- ST7735_FillCircle(121,24+10,5,ST7735_PURPLE);
-
- ST7735_DrawCircleHelper(136,24+10,5,1,ST7735_BLUE);
- ST7735_DrawCircleHelper(136,24+10,5,2,ST7735_YELLOW);
- ST7735_DrawCircleHelper(136,24+10,5,4,ST7735_RED);
- ST7735_DrawCircleHelper(136,24+10,5,8,ST7735_LIME);
-
- ST7735_FillCircleHelper(151,24+10,5,1,0,ST7735_TEAL);
- ST7735_FillCircleHelper(151,24+10,5,2,0,ST7735_PURPLE);
-
- ST7735_DrawString(5,24+6,"Hello",ST7735_MAGENTA,ST7735_BLACK,&Font_7x10);//字体实际高度为8个像素,所以偏移6个像素刚好在第一行居中2*6+8=20
- ST7735_DrawString(5,24+20+7,"Hello",ST7735_GREEN,ST7735_BLACK,&Font_11x18);//字体实际高度为16个像素,所以偏移7个像素刚好在第一行居中2*7+16=30
- ST7735_DrawString(5,24+50+7,"Hello",ST7735_YELLOW,ST7735_BLACK,&Font_11x18);//字体实际高度为16个像素,所以偏移7个像素刚好在第一行居中2*7+16=30
- ST7735_DrawLine( 70,24+21,80,24+49,ST7735_BLUE);
- ST7735_DrawLine( 90,24+21,80,24+49,ST7735_BLUE);
- ST7735_DrawLine( 90,24+21,100,24+49,ST7735_BLUE);
- ST7735_DrawLine( 110,24+21,100,24+49,ST7735_BLUE);
- ST7735_FillRoundRect(112,24+20+5,40,19,5,ST7735_GRAY);
-
- ST7735_DrawTriangle(70,24+78,100,24+52,100,24+78,ST7735_YELLOW);
-
- ST7735_FillTriangle(110,24+52,110,24+78,148,24+78,ST7735_GREEN);
-
- gpio_bits_write(LED4_GPIO,LED4_PIN,TRUE);
- delay_sec(1);
- gpio_bits_write(LED4_GPIO,LED4_PIN,FALSE);
- delay_sec(1);
- gpio_bits_write(LED4_GPIO,LED4_PIN,TRUE);
- delay_sec(1);
- gpio_bits_write(LED4_GPIO,LED4_PIN,FALSE);
- delay_sec(1);
-
- ST7735_FillScreen(ST7735_BLACK);
- ST7735_DrawImage(0, 24+0, 160, 80, **);
-
- while(1)
- {
- gpio_bits_write(LED3_GPIO,LED3_PIN,TRUE);
- delay_sec(1);
- gpio_bits_write(LED3_GPIO,LED3_PIN,FALSE);
- delay_sec(1);
- }
- }