先踏踏实实的把stm32的外设串口,SPI搞清楚,不要眼高手低,看不起小事。用SPI通信将pixy的数据读出来,将数据用串口发到串口助手上,然后处理数据,利用STM32的定时器调节pwm,控制电机,先让小车跑起来,随后在写小车的程序,和调节PID参数
1.1阅读手册&.C源码:
使能串口外设时钟(挂在APB1下)所以调用
void RCC_APB1PeriphClockCmd(uint32_t RCC_APB1Periph, FunctionalState NewState) 具体可以看一下RCC模块,和时钟树,总线架构。
初始化GPIO:这时要到GPIO模块来(PA9,PA10),复用功能
 
如果需要重映射配置AFIO寄存器;以串口一为例:AFIO_MAPR寄存器

初始化串口(usart):阅读源码:

typedef struct
{
  uint32_t USART_BaudRate;        
  uint16_t USART_WordLength;             
  uint16_t USART_StopBits;                             
  uint16_t USART_Parity;            
  uint16_t USART_Mode;                
  uint16_t USART_HardwareFlowControl;
} USART_InitTypeDef;
将串口的初始化的状态封装成一个结构体,就像GPIO模块那样,自己先定义这样一个结构体类型,赋值初始化,调用此函数
void USART_Init(USART_TypeDef* USARTx, USART_InitTypeDef* USART_InitStruct)

USART_TypeDef* USARTx是一个结构体指针,它指向USART的首地址,结构体的内存字节对齐,和寄存器的地址一一对应
typedef struct
{
  __IO uint16_t SR;
  uint16_t  RESERVED0; //填充用的,因为C语言结构体内存对齐原则。不然就和寄存器一一不对应了。
  __IO uint16_t DR;         //这里看看USART的寄存器地址映射图增强理解。
  uint16_t  RESERVED1;
  __IO uint16_t BRR;
  uint16_t  RESERVED2;
  __IO uint16_t CR1;
  uint16_t  RESERVED3;
  __IO uint16_t CR2;
  uint16_t  RESERVED4;
  __IO uint16_t CR3;
  uint16_t  RESERVED5;
  __IO uint16_t GTPR;
  uint16_t  RESERVED6;
} USART_TypeDef;                            
开启串口一接受中断:
使能串口一:
编写串口中断函数:
串口发送数据:USART_SendData(USART_TypeDef* USARTx, uint16_t Data)  //
 
1.2:中断向量控制器(NVIC):设置中断优先级:抢占优先级和子优先级;使用中断前,先要设置优先级分组,配置NVIC。
 
1.3:SPI外设模块使用:阅读源码&手册:
使能spi外设(APB1下)先使能外设模块时钟(和串口的套路差不多)pin要复用配置好GPIO的模式。初始化 最后使能外设模块。
SPI1-SPI3 SPI1和SPI3支持重映射,SPI2不支持重映射,默认PB12-PB15 (片选,SCK,SPI2_MISO,SPI2_MOSI)io配置:

51单片机模拟SPI时序操作ds1302(软件模拟)通过时序图模拟时序,通过位于,移位读出(写入)数据,注意高低位

typedef struct
{
  uint16_t SPI_Direction;           /*!< Specifies the SPI unidirectional or bidirectional data mode.单向双向数据模式
                                         This parameter can be a value of @ref SPI_data_direction */  
  uint16_t SPI_Mode;                /*!< Specifies the SPI operating mode.   主从模式
                                         This parameter can be a value of @ref SPI_mode */
  uint16_t SPI_DataSize;            /*!< Specifies the SPI data size.
                                         This parameter can be a value of @ref SPI_data_size */8或16位
  uint16_t SPI_CPOL;                /*!< Specifies the serial clock steady state. 
                                         This parameter can be a value of @ref SPI_Clock_Polarity */ //时钟的高低电平
  uint16_t SPI_CPHA;                /*!< Specifies the clock active edge for the bit capture.
                                           This parameter can be a value of @ref SPI_Clock_Phase *///数据采样时从第一个还是第二个时                                        钟跳变开始
  uint16_t SPI_NSS;                 /*!< Specifies whether the NSS signal is managed by
                                        hardware (NSS pin) or by software using the SSI bit. This parameter can be a value of                                           @ref SPI_Slave_Select_management */  //片选
  uint16_t SPI_BaudRatePrescaler;  
                                                   /*!< Specifies the Baud Rate prescaler value whch will be
                                              used to configure the transmit and receive SCK clock.This parameter can be a value of @ref                                                  SPI_BaudRate_Prescaler.@note The communication clock is derived from the                                                                  masterclock. The slave clock does not need to be set. *///波特率
uint16_t SPI_FirstBit;            /*!< Specifies whether data transfers start from MSB or LSB bit.第一位是最高位还是最低位
                                                   This parameter can be a value of @ref SPI_MSB_LSB_transmission */
uint16_t SPI_CRCPolynomial;       /*!< Specifies the polynomial used for the CRC calculation. */
}SPI_InitTypeDef;

2.1:先明白Pixy的串行协议:SPI通信,在Data  Out  Port选项中设置:

一个数据16位,7个数据,共14字节的数据。
01 00 9B 00 7B 00 A4 00 23 00 55 AA 3A 01 01 00 EE 00 1F 00 1C 00 10 00 55 AA 55 AA  
DC 01 01 00 9B 00 7E 00 A5 00 1D 00 55 AA 39 01 01 00 EE 00 20 00 1D 00 0D 00 55 AA 
9A 00 7E 00 A5 00 1F 00 55 AA 36 01 01 00 EE 00 1E 00 1C 00 0D 00 55 AA 55 AA E4 01 
A2 00 1F 00 55 AA 37 01 01 00 EE 00 1F 00 1C 00 0D 00 55 AA 55 AA D9 01 01 00 9B 00 
这几串数据浪费了我4天时间,真坑。注意SPI与串口读出的数据开始标志数据不同,
学会用上位机配置好pixy。使用spi协议读出数据发给串口:
2.4:处理数据:

接下来用读到的pixy的数据就做你想做的事了。

 

pixy&STM32使用记录(串口&SPI外设)的更多相关文章

  1. (stm32学习总结)—spi基本原理

    参考:spi详解   spi协议 SPI的基本介绍 SPI的简介 SPI,是英语Serial Peripheral interface的缩写,顾名思义就是串行外围设备接口,是Motorola首先在其M ...

  2. STM32(13)——SPI

    简介: SPI,Serial Peripheral interface串行外围设备接口. 接口应用在:EEPROM, FLASH,实时时钟,AD 转换器,还有数字信号处理器和数字信号解码器之间. 特点 ...

  3. 使用 VSCode 给STM32配置一个串口 printf 工程

    使用 VSCode 给STM32配置一个串口 printf 工程 gcc 重定向 printf 和 keil 不一样. 文件准备 先从以前的工程中拷过一份串口的代码来,然后在 main 函数中初始化串 ...

  4. 【STM32】使用DMA+SPI传输数据

    DMA(Direct Memory Access):直接存储器访问 一些简单的动作,例如复制或发送,就可以不透过CPU,从而减轻CPU负担 由于本人使用的是正点原子开发板,部分代码取自里面的范例 本篇 ...

  5. STM32 USB虚拟串口(转)

    源:STM32 USB虚拟串口 串口调试在项目中被使用越来越多,串口资源的紧缺也变的尤为突出.很多本本人群,更是深有体会,不准备一个USB转串口工具就没办法进行开发.本章节来简单概述STM32低端芯片 ...

  6. STM32学习笔记(八) SPI总线(操作外部flash)

    1. SPI总线简介 SPI全称串行外设接口,是一种高速,全双工,同步的外设总线:它工作在主从方式,常规需要至少4根线才能够正常工作.SPI作为基本的外设接口,在FLASH,EPPROM和一些数字通讯 ...

  7. 基于STM32之UART串口通信协议(一)详解

    一.前言 1.简介 写的这篇博客,是为了简单讲解一下UART通信协议,以及UART能够实现的一些功能,还有有关使用STM32CubeMX来配置芯片的一些操作,在后面我会以我使用的STM32F429开发 ...

  8. 嵌入式02 STM32 实验07 串口通信

    STM32串口通信(F1系列包含3个USART和2个UART) 一.单片机与PC机串行通信研究目的和意义: 单片机自诞生以来以其性能稳定,价格低廉.功能强大.在智能仪器.工业装备以及日用电子消费产品中 ...

  9. STM32之模拟串口设计

    一.设计用途: 公司PCB制成板降成本,选择的MCU比项目需求少一个串口,为满足制成板成本和项目对串口需求,选择模拟一路串口. 二.硬件电路: 三.设计实现: 工具&软件:STM32F030R ...

随机推荐

  1. MVC bootstrap-table显示数据时显示No matching records found

    问题:bootstrap-table加载数据不显示 @{ ViewBag.Title = "Index"; Layout = "~/Views/Shared/_Layou ...

  2. Keepalived 的使用

    1.什么是keepalived Keepalived的作用是检测web服务器的状态,如果有一台web服务器死机,或工作出现故障,Keepalived将检测到,并将有故障的web服务器从系统中剔除,当w ...

  3. PHP设计模式的六大设计原则

    PHP设计模式的六大设计原则 1 简介 软件设计最大的难题就是应对需求的变化,但是纷繁复杂的需求变化却是不可预料的.此时,我们可以通过六大设计原则良好的应对未来的变化. 2 讲解 2.1 单一职责原则 ...

  4. win10 桌面设置为远程桌面

    查看方法: 1.点击桌面“计算机”,右键,点击属性. 2.在计算机属性系统窗口中点击“远程设置”. 3.在“系统属性”对话框中远程协助勾选“允许远程协助连接这台计算机”. 4.在“远程协助”点击“高级 ...

  5. 解决vs2017不能添加引用问题

    c# 添加引用时报错:“未能正确加载“ReferenceManagerPackage”包”的解决方法 在添加应用的时候,右键点击“引用”,选择“添加引用”后,会提示“**未能正确加载Reference ...

  6. VS2017 community版使用码云(gitee)的一些过程,看图学习,傻瓜式教程

    首先你得有一个gitee账号,VS2017IDE开发工具 第一步,打开VS2017,点击菜单栏上->工具->扩展与更新,如图 然后点击 联机 然后输入 gitee 回车搜索 一定要选择我圈 ...

  7. 前端/C# 前后台交互文件上传、下载

    试了很多方式,最终确认这个全面简单版的.废话不多说,贴码. 文件上传 input的type命名为file,即可实现文件上传.嗯~~~现在html还是很强大的.Good! 前端 单个文件上传 Html: ...

  8. 一个 C# 文件权限的帮助类

    直接贴代码了: FilePermissionHelper.cs using System.Collections.Generic; using System.IO; using System.Secu ...

  9. 数据结构学习之字符串匹配算法(BF||KMP)

    数据结构学习之字符串匹配算法(BF||KMP) 0x1 实验目的 ​ 通过实验深入了解字符串常用的匹配算法(BF暴力匹配.KMP.优化KMP算法)思想. 0x2 实验要求 ​ 编写出BF暴力匹配.KM ...

  10. Linux新手随手笔记1.6

    RAID磁盘冗余阵列 1.I/O  速度 2.数据安全性  RAID 0 负载均衡.速度乘以二,但是数据安全性不行,任何一块盘损坏数据都会丢失. RAID 1 安全性性提升2倍,任何一个损坏另一个都有 ...