datasheet

STM32模拟spi控制MCP41100数字电位器

2019-07-11来源: eefocus关键字:STM32  模拟spi控制  MCP41100  数字电位器

以下代码只需放在一个完整的.c文件中运行就行了,添加基本的支持库就能运行了.


#include "stm32f10x.h"


#define SCK_1 GPIO_SetBits(GPIOA, GPIO_Pin_4)

#define SCK_0 GPIO_ResetBits(GPIOA, GPIO_Pin_4)

#define MOSI_1 GPIO_SetBits(GPIOA, GPIO_Pin_5)

#define MOSI_0 GPIO_ResetBits(GPIOA, GPIO_Pin_5)

#define CS_1 GPIO_SetBits(GPIOA, GPIO_Pin_6)

#define CS_0 GPIO_ResetBits(GPIOA, GPIO_Pin_6)


void writebyte(u8 data);

void mygpioinit(void);

void senddata(void);


/*******************************************************

函数名:mygpioinit(void)

功能:初始化端口

*******************************************************/

void mygpioinit(void)

{

    GPIO_InitTypeDef GPIO_InitStructure;

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);

    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6;

    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;

    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

    GPIO_Init(GPIOA, &GPIO_InitStructure);

}



/*******************************************************

函数名:senddata()

功能:发送数据

*******************************************************/


void senddata(void)

{

    CS_0;

    writebyte(0x11);   //发送命令,参照datasheet5.2将数据写入数据寄存器进行配置

    writebyte(0xbb);   //发送数据,范围是0x00到0xff

    CS_1;

}


/*******************************************************

函数名:writebyte(u8 data)

功能:模拟spi

*******************************************************/

void writebyte(u8 data)

{

    u8 i;

    SCK_0;

    MOSI_0;

    for (i = 0; i < 8; i++ )

    {

        MOSI_0;

        SCK_0;

        if (data & 0x80)  //将data与0x80进行与预算,目的是取得date二进制首位数值,如果首位是1,那么MOSI就会变成高电平,否则就会保持低电平

        {

            MOSI_1;

        }

SCK_0;

        SCK_1;

        data <<= 1 ;   //将date左移,继续循环进行比较

    }

}





/*******************************************************

函数名:主函数

功能:

*******************************************************/


int main()

{

    mygpioinit();

    while (1)

    {

        senddata();

    }

}




keil对中文支持太差,复制过来的注释全部乱码了,补了半天的注释.一开始的时候我把SCK,CS,MOSI(对应MCP41100的SI口)三个口都挂在GPIOA下面,刚好我这个开发板GPIOIA这里接了一个蜂鸣器,结果怎么改程序都不能调电阻,后来听到板子发出吱吱声发现是蜂鸣器,找到原因换了别的IO口才调好,大家用开发板做实验时一定要特别小心,使用板子的IO口时最好先看看电路是怎么接的.

关键字:STM32  模拟spi控制  MCP41100  数字电位器

编辑:什么鱼 引用地址:http://news.eeworld.com.cn/mcu/ic467474.html
本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:STM32常用通信——USART,IIC,SPI,CAN
下一篇:stm32通过SPI与adc124s021通信读取ad

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

STM32使用FreeRTOS中的链表创建节点与列表项

使用了STM32F103的FreeRTOS库来创建一个列表,其实FreeRTOS的list中链表是双向的循环链表,为了简单介绍,我直接说是列表了。 芯片使用的是GD32F103CBT6,该芯片兼容ST的库,不影响使用效果。 以下代码不全,仅提供思路,如有不足,请给我留言。第一步先定义变量,初始化列表及列表项nodeDevice node_t; //节点数据nodeDevice * pNode; //节点指针 xList list_t; //列表#define pList ((xList *) &list_t) //列表指针 xListItem item_t; //列表
发表于 2019-07-18

FreeRTOS学习笔记——基础知识与移植(STM32F103)

添加文件打开基础工程,新建分组FreeRTOS_CORE 和FreeRTOS_PORTABLE,然后向这两个分组中添加文件,如图2.2.1.4 所示:分组FreeRTOS_CORE 中的文件在什么地方就不说了,打开FreeRTOS 源码一目了然。重点来说说FreeRTOS_PORTABLE 分组中的port.c 和heap_4.c 是怎么来的,port.c 是RVDS 文件夹下的ARM_CM3 中的文件,因为STM32F103 是Cortex-M3 内核的,因此要选择ARM_CM3中的port.c 文件。heap_4.c 是MemMang 文件夹中的,前面说了MemMang 是跟内存管理相关的,里面有5 个c 文件:heap_1.c
发表于 2019-07-18
FreeRTOS学习笔记——基础知识与移植(STM32F103)

STM32CubeMX+FreeRTOS实验---使用两个实例,共用一个task

, 0, 128);  LED2FlashHandle = osThreadCreate(osThread(LED2Flash), NULL);只是一个定义osThreadDef只是一个定义,把相关的内容绑在一起,不是函数。osThreadCreate才是一个函数。第二个参数就是*argument,对应StartLEDFlashTask函数的输入参数。因此在osThreadDef之前加入code。/*import user code,may be changed by stm32cubeMX*//*take attention */    uint16_t led1pin,led2pin
发表于 2019-07-18
STM32CubeMX+FreeRTOS实验---使用两个实例,共用一个task

stm32 FreeRTOS中如何创建任务

#include "config.h"#include "global.h"#include "stdio.h"#include "PC.h" #include "FreeRTOS.h"#include "task.h"#include "list.h" void vLED1Task(void *pvParameters){ while(1) { GPIO_Reverse (); vTaskDelay(1000/portTICK_RATE_MS); }}void
发表于 2019-07-18

STM32CubeMX学习笔记——FreeRTOS_任务挂起与继续

Githubhttps://github.com/HaHaHaHaHaGe/Planof2019_half/tree/master/Course_Project/FreeRTOS/Class02_SuspendResume简介任务挂起与继续的作用,用于暂停运行某些任务与继续运行某些任务。就像用视频播放器看电影的播放按键与暂停按键一样简单。在STM32CubeMX上配置FreeRTOS非常的简单,几乎不需要做任何操作,只需要勾选移植FreeRTOS就成功了,关于在非Cube上的RTOS配置文件内的相关内容,也在下方的Configuration栏中给好了所有的配置都可以在这里完成任务创建有别于在没有使用Cube下的创建方式,在Cube
发表于 2019-07-18
STM32CubeMX学习笔记——FreeRTOS_任务挂起与继续

STM32 RTOS系统 学习笔记(一)

基本概念               RTOS全称为:Real Time OS,就是实时操作系统,强调的是:实时性。实时操作系统又分为硬实时和软实时。硬实时要求在规定的时间内必须完成操作 ,硬实时系统不允许超时,在软实时里面处理过程超时的后果就没有那么严格。       在实时操作系统中,我们可以把要实现的功能划分为多个任务,每个任务负责实现其中的一部分,每个任务都是一个很简单的程序,通常是一个死循环。
发表于 2019-07-18
STM32 RTOS系统 学习笔记(一)

小广播

何立民专栏

单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2019 EEWORLD.com.cn, Inc. All rights reserved