今天用硬件SPI刷了个屏幕显示。很是激动。主控使用SAM4L Xplained Pro starter kit套件实现。是基于Atmel官方的固件库实现的,自己建的模板,这样方便源代码共享到网上。主要用到这几个函数: 外设复用函数: ioport_set_pin_mode(xxx, xxx); ioport_disable_pin(xxx); 端口模式设置函数: ioport_set_pin_dir(xxx, xxx); ioport_set_pin_mode(xxx, xxx); 电平状态设置函数: arch_ioport_set_pin_level(xxx,x ) 现在我来简单说说这几个函数的用途和用法吧: ioport_set_pin_mode(xxx, xxx); 这个函数是管脚功能选择函数: 例如:把PORTC30脚设为SPI的SCK时钟脚,可以这样写: ioport_set_pin_mode(PIN_PC30B_SPI_SCK,MUX_PC30B_SPI_SCK); ioport_disable_pin(xxx);这个函数是复用功能使能函数,记住一定加上这句话,这样复用功能的外设才能工作。例如把PORTC30脚设为SPI的SCK时钟脚功能打开,可以这样写: ioport_disable_pin(PIN_PC30B_SPI_SCK); ioport_set_pin_dir(xxx, xxx);这个函数是管脚的方向设置函数,例如把PORTC08脚设为输出可以这样写: ioport_set_pin_dir(PIN_PC08,IOPORT_DIR_OUTPUT); 最后是管脚电平状态设置函数:arch_ioport_set_pin_level(xxx,x ) ,这个函数带两个参数输入的,例如把PORTC08的管脚设为低电平,写法如下: arch_ioport_set_pin_level(PIN_PC08, 0 ); 现在我来说说我函数的流程吧: 函数首先是进行sysclk_init()函数打开所有GPIO的时钟操作,这个跟STM32的芯片一个样的,要用到某些外设时,要打开相应的外设的时钟。 然后是设置串口,初始化TFT屏幕,然后用串口向电脑打印信息,最后就是一直刷新屏幕,显示21ic的图标和我论坛的ID号: 主函数的代码如下: int main()
{
sysclk_init();
arch_ioport_init();
ioport_set_pin_dir(PIN_PC07, IOPORT_DIR_OUTPUT);
ioport_set_pin_level(PIN_PC07, IOPORT_PIN_LEVEL_LOW);
ioport_set_pin_mode(PIN_PC26A_USART1_RXD, MUX_PC26A_USART1_RXD);
ioport_disable_pin(PIN_PC26A_USART1_RXD);
ioport_set_pin_mode(PIN_PC27A_USART1_TXD, MUX_PC27A_USART1_TXD);
ioport_disable_pin(PIN_PC27A_USART1_TXD);
/*
//配置板子上的硬件SPI
ioport_set_pin_mode(PIN_PA21A_SPI_MISO, MUX_PA21A_SPI_MISO);//把PORTA21配置成MSIO
ioport_disable_pin(PIN_PA21A_SPI_MISO); //使能MSIO功能
ioport_set_pin_mode(PIN_PA22A_SPI_MOSI, MUX_PA22A_SPI_MOSI);//把PORTA22配置成MOSI
ioport_disable_pin(PIN_PA22A_SPI_MOSI); //使能MOSI功能
ioport_set_pin_mode(PIN_PC30B_SPI_SCK, MUX_PC30B_SPI_SCK); //把PORTB30配置成SCK
ioport_disable_pin(PIN_PC30B_SPI_SCK); //使能SCK功能
ioport_set_pin_mode(PIN_PB11B_SPI_NPCS2,MUX_PB11B_SPI_NPCS2);//把PORTB11配置成CS
ioport_disable_pin(PIN_PB11B_SPI_NPCS2); //使能CS功能
ioport_set_pin_dir(UG_2832HSWEG04_DATA_CMD_GPIO, IOPORT_DIR_OUTPUT);
ioport_set_pin_mode(UG_2832HSWEG04_DATA_CMD_GPIO, IOPORT_MODE_PULLUP);
ioport_set_pin_dir(UG_2832HSWEG04_RESET_GPIO, IOPORT_DIR_OUTPUT);
ioport_set_pin_mode(UG_2832HSWEG04_RESET_GPIO, IOPORT_MODE_PULLUP);
configure_console(); //配置串口
ssd1306_init(); //初始化OLED
ssd1306_clear(); //清OLED
ssd1306_set_page_address(0); //行地址
ssd1306_set_column_address(0); //列地址
ssd1306_write_text("My ID is : qianzgai00001 !");//要显示的内容
ssd1306_set_page_address(2);
ssd1306_set_column_address(30);
ssd1306_write_text("----Thanks EEWORD !");
*/
configure_console(); //配置串口
Lcd_Init();
printf("\r\n\r\n-- TFT试验 --\r\n");
printf("\r\n\r\n-- 强仔00001 --\r\n");
printf("\r\n\r\n-- 联系方式:963775289 --\r\n");
while (1)
{
//usart_getchar(USART1,&data);
//usart_putchar(USART1,data);
showimage(gImage_21ic);
}
}
效果图:
SAM4L Xplained Pro starter kit 套件好帅:lol:lol
附上源代码:
TFT屏幕显示.zip
(1.15 MB)
|