历史上的今天
今天是:2025年07月11日(星期五)
2019年07月11日 | STM32模拟spi控制MCP41100数字电位器
2019-07-11 来源:eefocus
以下代码只需放在一个完整的.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口时最好先看看电路是怎么接的.
史海拾趣
|
我要用DS18B20设计一个数字式温度计,要求是用protues仿真,并且要求可以切换测华氏度和摄氏度。知道的兄弟,赐教一下。我是单片机初学者,汇编语言掌握不错,希望大家一起探讨下,学习学习~~~知道的,邮箱我:wmywolf@qq.com… 查看全部问答> |
|
谁在玩WINCE60?发个ARMV4I版本的RIL。DLL给我啊,我的WINCE60找不到这个文件,大家帮帮忙! 谁在玩WINCE60?发个ARMV4I版本的RIL。DLL给我啊,我的WINCE60找不到这个文件,大家帮帮忙! QQ:392325349; MSN:xqhrs232@hotmail.com; email---xqhrs232@yahoo.com.cn… 查看全部问答> |
|
我用的是VS2008,进行wince 编程,在进行中有个问题如题,如何得到编写的程序在设备中的目录,以便在程序中向这个目录中添加文件,最好能给出简单的代码,谢谢。… 查看全部问答> |
|
PC采用TCP&UDP测试工具接收2440发送的数据 新手求助 大家帮忙看看 问题:1.若发送内容只是一行字符的文件 只收到文件内容的第一个字符 TCP&UDP测试工具 计数显示的数 是文件字符数2倍 2.若发送分辨率640X480 600K的b ...… 查看全部问答> |
|
F-E56CSM-V1嵌入式MODEM模块 简介: F-E56CSM-V1 MODEM是嵌入式串口/TTL电平双选择直流5V或3.3V供电Modem模块,为用户提供支持V.92、V.90、V.34、V.32bis及以下协议的调制解调器OEM、ODM方案。 F-E56CSM-V1 MODEM模块支持上行速率33.6Kbps和下行 ...… 查看全部问答> |
|
STM8S103的TIM1—CH1测量PWM输入信号 我完全按照官方参考手册RM0016的寄存器配置 TIM1->CCMR1 = 0x01; //置TIM1_CCMR1寄存器的CC1S=01(选中TI1) TIM1->CCMR2 = 0x02; //置TIM1_CCMR2寄存器的CC2S=10(选中TI1FP ...… 查看全部问答> |
|
介绍一种基于仪表总线的小型分布式测控系统的设计方案。采用TI公司的仪表总线专用收发芯片TSS721A及具有极低功耗MSP430系列单片机,使系统设计大为简化。以办楼安全监控系统的设计为例进行说明。… 查看全部问答> |
|
虽然M4也快出了了,但是好像不集成网络吧,9B96好像集成哦, 所以非常想学一学。 关于M3的认识很肤浅,但是大家都有一个初学的过程,希望论坛提供一个机会,俺卖个9B96去学学 学习目标: 主要是看看能不能使用到其网络和USB功能。 对于他的网 ...… 查看全部问答> |




