历史上的今天
返回首页

历史上的今天

今天是:2024年10月19日(星期六)

正在发生

2019年10月19日 | STM32F4 SPI2初始化及收发数据【使用库函数】

2019-10-19 来源:eefocus

我的STM32F4 Discovery上边有一个加速度传感器LIS302DL。在演示工程中,ST的工程师使用这个传感器做了个很令人羡慕的东西:解算开发板的姿态。当开发板倾斜时候,处于最上边的LED点亮,其他LED不亮。同时,用MicroUSB数据线将开发板连接电脑时,开发板就会虚拟成一个鼠标。倾斜开发板时,鼠标指针会向倾斜的方向移动。归根结底,就是牛B的ST工程师用加速度传感器完成了姿态解算。


在开发板上,加速度传感器使用了SPI方式用STM32F4芯片进行通信。STM32F4的SPI1 作为主机,与LIS302Dl进行通信,读取或者写入数据。由于我没有使用过STM32的SPI口,因此在板子的空余资源中找到了SPI2接口来做实验。实验是这样的:将SPI的MISO和MOSI脚相连。这样SPI发送了什么数据,就能接收到什么数据。不需要额外的器件就能试验。


引脚:将PB13、PB14、PB15三个引脚的复用功能,分别对应于SPI2SCK、SPI2MISO、SPI2MOSI。


引脚初始化:

void SPI_GPIOConfig(void)
{
    GPIO_InitTypeDef GPIO_InitStructure;
    RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB,ENABLE);  //开启时钟
    
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;  //引脚初始化
    GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15;
    GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOB,&GPIO_InitStructure);
    
    GPIO_PinAFConfig(GPIOB,GPIO_PinSource13,GPIO_AF_SPI2);  //打开引脚的复用功能
    GPIO_PinAFConfig(GPIOB,GPIO_PinSource14,GPIO_AF_SPI2);
    GPIO_PinAFConfig(GPIOB,GPIO_PinSource15,GPIO_AF_SPI2);
}

SPI2功能初始化:

void SPI_Config(void)
{
    SPI_GPIOConfig();
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2,ENABLE);  //时钟
    
    SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;  //全双工模式
    SPI_InitStructure.SPI_Mode = SPI_Mode_Master;   //作为主机使用
    SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;   //数据长度8
    SPI_InitStructure.SPI_CPOL  = SPI_CPOL_High;
    SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge;
    SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;   //软件设置NSS功能
    SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_256;
    SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;
    SPI_InitStructure.SPI_CRCPolynomial = 7;
    SPI_Init(SPI2,&SPI_InitStructure);
    SPI_Cmd(SPI2,ENABLE);
}

之后就可以收发数据了:

void MySPI_SendData(char da)
{
    while(SPI_I2S_GetFlagStatus(SPI2,SPI_I2S_FLAG_TXE)==RESET);
    SPI_SendData(SPI2,da);
}

uint8_t MySPI_ReceiveData(void)
{
    while(SPI_I2S_GetFlagStatus(SPI2,SPI_I2S_FLAG_RXNE)==RESET);
    return SPI_ReceiveData(SPI2);
}

推荐阅读

史海拾趣

Ericsson Power Modules公司的发展小趣事

在创立初期,Ericsson Power Modules就展现出了强大的技术创新能力。公司团队通过深入研究电源技术、电路板应用和系统知识,成功开发出了一系列高性能、高效率的电源模块产品。其中,DC-DC转换器、中级和先进总线转换器、POL稳压器等产品因其卓越的性能和稳定性,在市场上赢得了广泛好评。这些技术突破和产品创新为Ericsson Power Modules的后续发展奠定了坚实的基础。

佰宏(BHFUSE)公司的发展小趣事

佰宏公司始终坚持开放合作的理念,与多家知名企业建立了战略合作伙伴关系。例如,与立讯精密、奋达科技等实力企业的合作,不仅为佰宏带来了更多的业务机会,也进一步提升了公司的品牌影响力和市场地位。这些合作不仅带来了经济效益,更为佰宏的长远发展奠定了坚实的基础。

DURABLE公司的发展小趣事

在电子材料领域取得初步成功后,DURABLE公司意识到市场拓展的重要性。公司开始积极拓展海外市场,与全球知名电子产品制造商建立合作关系。通过深入了解不同地区的市场需求和消费者偏好,DURABLE不断调整产品策略,推出符合当地市场需求的产品。同时,公司还加强了与渠道合作伙伴的合作,通过完善的销售网络和售后服务体系,提升了产品的市场占有率和客户满意度。

DEVCON公司的发展小趣事

在竞争激烈的电子行业中,提供优质的服务是赢得客户信任的关键。DEVCON公司深知这一点,因此不断创新服务模式,提升服务质量。公司建立了完善的售后服务体系,为客户提供及时、专业的技术支持和解决方案。同时,公司还积极开展培训活动,提升员工的技能水平和服务意识。这些创新举措赢得了客户的广泛赞誉和信赖,为DEVCON公司的稳定发展提供了有力保障。

台湾三礼(3L)公司的发展小趣事

近年来,随着环保意识的提升和绿色能源的普及,三礼公司也积极投身于绿色生产领域。2019年,公司在广西南宁开始建设新厂,预定投资3亿元人民币用于厂房及自动化设备的建设。新厂总建筑面积达70,000平方米,将成为公司目前所有生产基地中规模最大的一个。同时,公司还计划全面架设太阳能发电系统,目标是在未来三年内承担公司总需求电量的30%。这一举措不仅有助于降低公司的生产成本,还体现了公司对环保事业的积极贡献。

这五个故事只是三礼公司发展历程中的一部分缩影,但它们却生动地展现了公司在电子行业中的成长轨迹和不懈努力。从北美市场的拓展到中国内地生产能力的扩大,再到技术突破和新产品开发,三礼公司始终保持着敏锐的市场洞察力和强大的创新能力。同时,公司还积极投身于绿色生产领域,为推动电子行业的可持续发展做出了积极贡献。

复旦微电子(FM)公司的发展小趣事

近年来,随着环保意识的提升和绿色能源的普及,三礼公司也积极投身于绿色生产领域。2019年,公司在广西南宁开始建设新厂,预定投资3亿元人民币用于厂房及自动化设备的建设。新厂总建筑面积达70,000平方米,将成为公司目前所有生产基地中规模最大的一个。同时,公司还计划全面架设太阳能发电系统,目标是在未来三年内承担公司总需求电量的30%。这一举措不仅有助于降低公司的生产成本,还体现了公司对环保事业的积极贡献。

这五个故事只是三礼公司发展历程中的一部分缩影,但它们却生动地展现了公司在电子行业中的成长轨迹和不懈努力。从北美市场的拓展到中国内地生产能力的扩大,再到技术突破和新产品开发,三礼公司始终保持着敏锐的市场洞察力和强大的创新能力。同时,公司还积极投身于绿色生产领域,为推动电子行业的可持续发展做出了积极贡献。

问答坊 | AI 解惑

在mtk做手机软件开发有前途么?很急,请各位指教!

  我现在拿到mtk的offer了,手机软件开发职位,11w/年左右,我也同时拿到了另一家国内比较有名的做网络安全的公司的offer,8~9w/年。     上面两个公司职位一个是偏嵌入式,一个是win c++软件开发, 我是计算机系的,自己感 ...…

查看全部问答>

求助:eVC开发数据库的问题

请教各位高人:     我使用的工具是eVC4.0,前期开发了一些程序,不是利用MFC框架编的,直接用API编写的 那么我想问一下在我目前的这样开发环境下,开发数据库数据库,选用SQLite和SQLCE哪个开发容易一些呢? 另外:我没有开发数据库 ...…

查看全部问答>

大锅和机顶盒的原理是?有点疑问,很愚昧

我这样问,好像是很简单的问题了。 大锅和机顶盒好像都是只会接受消息,不会回复消息。 如果大锅能回复消息,卫星怎能承受得了。 机顶盒也是一样。 如果是这样,怎么认证帐号呢?[img=http://forum.eeworld.net/PointForum/ui/scripts/eeworld/ ...…

查看全部问答>

请教USB DEVICE 驱动的一个问题

Bulk-Only时 如果HOST向DEVICE写数据时 出现如下情况: 1 HOST发送CBW 2 DEVICE接收后开始等待DATA 3 HOST没有接收硬件层的关于CBW的确认。(对USB不了解,其中可能出现了重传等过程。最终的结果就是,HOST认为CBW没有被接收,DEVICE则等待DATA ...…

查看全部问答>

--声卡驱动 找不到 啊 !!!

音频控制芯片 SiS Azalia Audio Controller 芯片制造商 SiS 子系统ID 304217AAh 板卡制造商 Lenovo 中断 IRQ 18,INT# A ------------------------以上是Windows优化大师 检测的信息 sis high definition audio controller 着驱动精灵的信息 ...…

查看全部问答>

VGA 转 RGB

请问有谁做过VGA 转 RGB的系统没? 电脑显卡出来的VGA显示信号,转变为RGB数字信号,24位的最好, 就是想用480x272的LCD液晶来显示电脑输出的显示信号呀 ,各位高 手请指点一下,用哪个芯片好?…

查看全部问答>

怎么理解 ??????????????????????????????????????????????????????????????????

8051的停止位怎么设置? -------------------------------------------------------------------------------- 发布时间: 2006-12-15 ; 上次回复: 2006-12-15; 总计回复: 1人次 -------------------------------------------------------------- ...…

查看全部问答>

sql ce 数据库联接的问题,困扰

需要做一个sql ce的程序,我的开发环境是.net 2005,pc端数据库是sql server 2000 Developer版,pda操作系统mobile 5,sql ce 2.0,数据库放在My Documents下。 在程序进行数据库pull时连接不上,提示“The database file cannot be found. Check ...…

查看全部问答>

IAR5.4所產生的library(.a)如何在GCC下使用??

Dear all, 有人使用過IAR5.4產生的library,然後在GCC(WINARM)下使用嗎??…

查看全部问答>