stm32 的spi总线配置-u球体育app下载

单片机 > 单片机程序设计 > 详情

stm32 的spi总线配置

发布时间:2024-07-25 发布时间:
|

     项目中经常会用到多路spi,但是各路的配置又不尽相同,其中spi3默认状态是jlink模式,所以如果想正常使用spi3,就需要对其重映射。下面给出spi2和spi3的配置程序,该配置已验证。

   验证mcu:stm32f107  

   1、spi2配置

     void spi_init(void)
{
uint32_t cnt;
gpio_inittypedef gpio_initstructure;
spi_inittypedef  spi_initstructure;

/* 使能 spi2 时钟 */                         
rcc_apb2periphclockcmd(rcc_apb2periph_gpiob | rcc_apb2periph_gpioe, enable);
rcc_apb1periphclockcmd(rcc_apb1periph_spi2,enable);

/* ---------通信i/o初始化----------------
* pb13-spi2-sck 
* pb14-spi2-miso
* pb15-spi2-mosi 
*/
gpio_initstructure.gpio_pin = gpio_pin_13 | gpio_pin_14 | gpio_pin_15;
gpio_initstructure.gpio_speed = gpio_speed_50mhz;
gpio_initstructure.gpio_mode = gpio_mode_af_pp;  // 复用输出
gpio_init(gpiob, &gpio_initstructure);


/* -------- 片选i/o初始化----------------*/
/* pb12-spi2-nss:enc28j60_cs */ 
      gpio_initstructure.gpio_pin = gpio_pin_12;
      gpio_initstructure.gpio_speed = gpio_speed_10mhz;
      gpio_initstructure.gpio_mode = gpio_mode_out_pp;  // 推挽输出
      gpio_init(gpiob, &gpio_initstructure);  
      gpio_setbits(gpiob, gpio_pin_12); // 先把片选拉高,真正用的时候再拉低

/* ---------复位i/o初始化----------------*/
/* pe6_rst */ 
     gpio_initstructure.gpio_pin = gpio_pin_6;
     gpio_initstructure.gpio_speed = gpio_speed_10mhz;
     gpio_initstructure.gpio_mode = gpio_mode_out_pp;  // 推挽输出
     gpio_init(gpioe, &gpio_initstructure);  
     gpio_setbits(gpioe, gpio_pin_6);// 先把复位拉高,真正用的时候再拉低复位

/* spi2 配置 */ 
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_low;
spi_initstructure.spi_cpha = spi_cpha_1edge;
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(spi2, &spi_initstructure);

/* 使能 spi2  */
spi_cmd(spi2, enable);
}


2、spi3配置

   需要注意的是:

 (1)开启afio时钟: rcc_apb2periphclockcmd(rcc_apb2periph_afio, enable); 

 (2)使能swd :gpio_pinremapconfig(gpio_remap_swj_jtagdisable,enable) ;

void spi3_init(void)
{
gpio_inittypedef gpio_initstructure;
spi_inittypedef  spi_initstructure; 

/* 使能 spi3时钟 */                         
rcc_apb2periphclockcmd(rcc_apb2periph_gpiob | rcc_apb2periph_gpioa |        rcc_apb2periph_gpioc, enable);
rcc_apb1periphclockcmd(rcc_apb1periph_spi3,enable);
rcc_apb2periphclockcmd(rcc_apb2periph_afio, enable); 
gpio_pinremapconfig(gpio_remap_swj_jtagdisable,enable) ;

/* ---------通信i/o初始化----------------
* pb3-spi3-sck 
* pb4-spi3-miso
* pb5-spi3-mosi 
*/
gpio_initstructure.gpio_pin = gpio_pin_3| gpio_pin_4 | gpio_pin_5;
gpio_initstructure.gpio_speed = gpio_speed_50mhz;
gpio_initstructure.gpio_mode = gpio_mode_af_pp;   // 复用输出
gpio_init(gpiob, &gpio_initstructure);


/* --------- 片选i/o初始化----------------*/
/* pb12-spi2-nss:enc28j60_cs */ 
      gpio_initstructure.gpio_pin = gpio_pin_15;
      gpio_initstructure.gpio_speed = gpio_speed_10mhz;
      gpio_initstructure.gpio_mode = gpio_mode_out_pp;   // 推挽输出  gpio_mode_out_pp
      gpio_init(gpioa, &gpio_initstructure);  
      gpio_setbits(gpioa, gpio_pin_15); // 先把片选拉高,真正用的时候再拉低

/* ---------复位i/o初始化----------------*/
/* pe6-enc28j60_rst */ //复位引脚
       gpio_initstructure.gpio_pin = gpio_pin_9;
       gpio_initstructure.gpio_speed = gpio_speed_10mhz;
       gpio_initstructure.gpio_mode = gpio_mode_out_pp;   // 推挽输出
       gpio_init(gpioc, &gpio_initstructure);  
       gpio_setbits(gpioc, gpio_pin_9); // 先把复位拉高,真正用的时候再拉低复位

/* spi3 配置 */ 
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_low;
spi_initstructure.spi_cpha = spi_cpha_1edge;
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(spi3, &spi_initstructure);

/* 使能 spi3  */
spi_cmd(spi3, enable); 
}



『本文转载自网络,u球体育app下载的版权归原作者所有,如有侵权请联系删除』

热门文章 更多
使用ni开发系统和amr系统实现自动化仪表读数系统的设计
网站地图