打印
[其他ST产品]

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

[复制链接]
557|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
原来是wjc|  楼主 | 2023-7-8 15:12 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
以下代码只需放在一个完整的.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左移,继续循环进行比较
    }  
}



使用特权

评论回复
沙发
原来是wjc|  楼主 | 2023-7-8 15:13 | 只看该作者
/*******************************************************
函数名:主函数
功能:
*******************************************************/

int main()
{
    mygpioinit();
    while (1)
    {
        senddata();
    }
}



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

使用特权

评论回复
板凳
643757107| | 2023-7-9 17:39 | 只看该作者
怎么IO模拟啊,没技术含量。

使用特权

评论回复
地板
643757107| | 2023-7-9 17:39 | 只看该作者
建议尝试使用硬件实现,要不浪费硬件。

使用特权

评论回复
5
MessageRing| | 2023-7-9 22:48 | 只看该作者
用msp432驱动应该改哪些啊?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

78

主题

994

帖子

0

粉丝