原创 STM32 SPI初始化函数 非使用STM32库方式

2008-8-27 09:30 3523 9 10 分类: MCU/ 嵌入式

netjob @2008


http://bbs.21ic.com/club/bbs/bbsView.asp?


//=============================================================================
//
//=============================================================================
void STM32_SPI_Configuration(void)
{
      //SPI_InitTypeDef  SPI_InitStructure;
      //GPIO_InitTypeDef GPIO_InitStructure;
  
        /* Enable SPI1 and GPIOA clocks */
       // RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE);
   STM32_Rcc_Regs->apb2enr.all|=RCC_SPI1EN;   // 时钟使能 
 
      /* Configure SPI1 pins: NSS, SCK, MISO and MOSI */
      //GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7;
      //GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
      //GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
      //GPIO_Init(GPIOA, &GPIO_InitStructure);
 STM32_Gpioa_Regs->crl.bit.CNF5=Output_Af_push_pull;
 STM32_Gpioa_Regs->crl.bit.MODE5=Output_Mode_50mhz;
 
        STM32_Gpioa_Regs->crl.bit.CNF6=Output_Af_push_pull;
 STM32_Gpioa_Regs->crl.bit.MODE6=Output_Mode_50mhz;
       
 STM32_Gpioa_Regs->crl.bit.CNF7=Output_Af_push_pull;
 STM32_Gpioa_Regs->crl.bit.MODE7=Output_Mode_50mhz;


      /* Configure PB.12 as Output push-pull, used as Flash Chip select */
      //GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;
      //GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
      //GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
      //GPIO_Init(GPIOA, &GPIO_InitStructure);
 STM32_Gpioa_Regs->crl.bit.CNF4=Output_push_pull;
 STM32_Gpioa_Regs->crl.bit.MODE4=Output_Mode_50mhz;


      /* Deselect the FLASH: Chip Select high */
        //GPIOA->BSRR = GPIO_Pin_4;
 STM32_Gpioa_Regs->bsrr.bit.BS4=1;// 置位


  /* SPI2 configuration */
  //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(SPI1, &SPI_InitStructure);
 
  STM32_Spi1_Regs->cr1.bit.BR=2;    // 72mhz/8=9mhz  010=Fpclk/8
  STM32_Spi1_Regs->cr1.bit.CPHA=1;  // 1: 数据采样从第二个时钟边沿开始
  STM32_Spi1_Regs->cr1.bit.CPOL=1;  // 1: 空闲状态时,SCK保持高电平
  STM32_Spi1_Regs->cr1.bit.DFF=0;   // 0:使用8位数据帧格式进行发送/接收
  STM32_Spi1_Regs->cr1.bit.LSBFIRST=0;   // 0:先发送MSB
  STM32_Spi1_Regs->cr1.bit.MSTR=1;       //  1:配置为主设备
  STM32_Spi1_Regs->cr1.bit.SSM=1;        //  1:启用软件从设备管理。
  STM32_Spi1_Regs->cr1.bit.BIDIMODE=0;    //0:选择“双线双向”模式
    
  /* Enable SPI1  */
  //SPI_Cmd(SPI1, ENABLE);  
  STM32_Spi1_Regs->cr1.bit.SPE=1;    //1:开启SPI设备
 
}//end sub

文章评论1条评论)

登录后参与讨论

用户392262 2010-7-31 11:53

有完整的程序吗

用户68740 2007-1-4 15:56

好样的,以后多上传点
相关推荐阅读
用户479664 2009-12-30 17:07
CRC校验之 MSP430与STM32通吃版
CRC是一个必备工具。在工程上,特别是通信。好比网卡芯片,无效RF CC500 CC1100等芯片内部都有CRC电路。...
用户479664 2009-09-01 17:59
TMS320F280X SPI SPIA使用入门与总结
TMS320F280X SPI SPIA使用入门与总结Netjob @ 2009年 8月31日晚我使用过NXP ARM LPC2138的SPI口,ATMEL AT91SAM7S256的SPI,MSP4...
用户479664 2009-08-25 23:09
STM32 CAN 标称位时间计算
以知 CAN总线 每秒发送的位数,即 最大传输 比特率是 1Mb/s( 1 兆位每秒)这样 CAN总线的【最小标称位时间】就是  1 μs,简单的说就是 发送 1 位要1 μs时间。根据ISO1189...
用户479664 2009-08-25 23:07
精解 SPI 的 CPHA 时钟相位 与CPLK 时钟极性
精解 SPI 的 CPHA 时钟相位 与CPLK 时钟极性Netjob @ 2009-08-01...
用户479664 2009-06-18 23:00
STM32 Hello World!
https://static.assets-stash.eet-china.com/album/old-resources/2008/12/12/8ee2aa15-a51b-441d-96f5-a15...
用户479664 2009-05-11 23:56
精解 Solder Mask 和Paste Mask 区别
Solder Mask Layers【阻焊层】。这个是反显层! 有的表示无的,无的表示有的嘛,不明白?你在Solder Mask Layer【有TopSolder 和BottomSolder】上FIL...
我要评论
1
9
关闭 站长推荐上一条 /2 下一条