- BSTIMClockFrequency=Common_BSTIM_RCC_Initialize(TIM6, RCC_HCLK_DIV4);
- Common_TIM_NVIC_Initialize(TIM6_IRQn, ENABLE);
- Common_TIM_Base_Initialize(TIM6, 64000, 0);
- TIM_Base_Reload_Mode_Set(TIM6, TIM_PSC_RELOAD_MODE_IMMEDIATE);
- TIM_Interrupt_Enable(TIM6, TIM_INT_UPDATE);
- TIM_On(TIM6);
顺便把GPIO的功能实现一下,在中断函数中闪LED灯
- void TIM6_IRQHandler(void)
- {
-
- if (TIM_Interrupt_Status_Get(TIM6, TIM_INT_UPDATE) != RESET)
- {
- TIM_Interrupt_Status_Clear(TIM6, TIM_INT_UPDATE);
- /* Pin PC.06 toggling */
-
- //log_info("GPIO_Pin_Toggle!\r\n");
- tim_count++;
- if(tim_count==1000)
- {
- tim_count=0;
- GPIO_Pin_Toggle(GPIOA, GPIO_PIN_1);
-
-
- }
- }
- }
二、SPI
由于SPI的引脚与LED的引脚冲突了,所以在调试的时候,把两个工程整合的时候,数据总是不对。去掉冲突的LED配置与操作就正常了,
使用硬件CS功能时,初始化有时会失败,使用软件CS就可以了。
- void spi_init()
- {
- SPI_I2S_Reset(SPI_MASTER);
-
- /* SPI_MASTER configuration --------------------------------------------------*/
- SPI_Initializes_Structure(&SPI_InitStructure);
- SPI_InitStructure.DataDirection = SPI_DIR_DOUBLELINE_FULLDUPLEX;//SPI_DIR_SINGLELINE_TX;//
- SPI_InitStructure.SpiMode = SPI_MODE_MASTER;
- SPI_InitStructure.DataLen = SPI_DATA_SIZE_8BITS;
- SPI_InitStructure.CLKPOL = SPI_CLKPOL_HIGH;
- SPI_InitStructure.CLKPHA = SPI_CLKPHA_SECOND_EDGE;
- SPI_InitStructure.NSS = SPI_NSS_SOFT;
- /* It is recommended that the SPI master mode of the C version chips should not exceed 18MHz */
- SPI_InitStructure.BaudRatePres = SPI_BR_PRESCALER_128;
- SPI_InitStructure.FirstBit = SPI_FB_MSB;
- SPI_InitStructure.CRCPoly = 7;
- SPI_Initializes(SPI_MASTER, &SPI_InitStructure);
- SPI_Set_Nss_Level(SPI_MASTER, SPI_NSS_HIGH);
-
- /* Enable SPI_MASTER CRC calculation */
- SPI_CRC_Enable(SPI_MASTER);
-
- /* Enable SPI_MASTER */
- SPI_ON(SPI_MASTER);
-
- }
- void spi_gpio_init(void)
- {
- GPIO_InitType GPIO_InitStructure;
- GPIO_Structure_Initialize(&GPIO_InitStructure);
- /* Configure master pins: SCK, MISO and MOSI ---------------------------------*/
- /* Confugure SCK and MOSI pins as Alternate Function Push Pull */
- GPIO_InitStructure.Pin = SPI_MASTER_MOSI_PIN | SPI_MASTER_CLK_PIN | SPI_MASTER_MISO_PIN | SPI_MASTER_NSS_PIN;
- GPIO_InitStructure.GPIO_Mode = GPIO_MODE_AF_PP;
- GPIO_InitStructure.GPIO_Slew_Rate = GPIO_SLEW_RATE_FAST;
- GPIO_InitStructure.GPIO_Alternate = SPI_MASTER_GPIO_ALTERNATE;
- GPIO_Peripheral_Initialize(SPI_MASTER_GPIO, &GPIO_InitStructure);
- }
- u8 SPI_WriteByte(SPI_Module* SPIx, u8 Byte)
- {
- /* Wait for SPI_MASTER Tx buffer empty */
- while (SPI_I2S_Flag_Status_Get(LCD_SPI, SPI_I2S_FLAG_TE) == RESET);
-
- /* Send SPI_SLAVE data */
- SPI_I2S_Data_Transmit(LCD_SPI, Byte);
-
- /* Wait for SPI_SLAVE data reception */
- while (SPI_I2S_Flag_Status_Get(LCD_SPI, SPI_I2S_FLAG_RNE) == RESET);
-
- return SPIx->DAT;
- }
驱动了一块12864的屏。
- void lcd_init(void)
- {
- LCD_CS_L();
- LCD_CMD_OFF();
-
- SPI_WriteByte(LCD_SPI, 0xAE);
- SPI_WriteByte(LCD_SPI, 0xA0);
- SPI_WriteByte(LCD_SPI, 0xc8);
- SPI_WriteByte(LCD_SPI, 0x40);
- SPI_WriteByte(LCD_SPI, 0xa6);
- SPI_WriteByte(LCD_SPI, 0xa4);
- SPI_WriteByte(LCD_SPI, 0xA2);
- SPI_WriteByte(LCD_SPI, 0x2f);
- SPI_WriteByte(LCD_SPI, 0x23);
- SPI_WriteByte(LCD_SPI, 0x81);
- SPI_WriteByte(LCD_SPI, 0x2b);
- SPI_WriteByte(LCD_SPI, 0xaf);
-
-
-
- LCD_CS_H();
-
- }
效果如下:
总结:
整体上API的使用与STM32的基本上是差不多的,相应的工程移植过来的工作量也并不大。
后期就需要把相应的基本功能移植过来,并在稳定性上进行长时间的测试了。