Suger441 2024-03-21 18:37 采纳率: 33.3%
浏览 759
已结题

关于#stm32#的问题:.c(73): error: #165: too few arguments in function call换了两种参数方式(语言-c语言)

.c(73): error: #165: too few arguments in function call
换了两种参数方式,都失败了,有没有大 佬 看看
已解决:定义的形参未使用导致 uint8_t Myspi_R_MISO(void)

img

#include "stm32f10x.h"  


void Myspi_W_SS(uint8_t BitValue)//CS  pa4
{
  GPIO_WriteBit(GPIOA,GPIO_Pin_4, (BitAction)BitValue);
}

void Myspi_W_SCK(uint8_t BitValue)
     {
       GPIO_WriteBit(GPIOA,GPIO_Pin_5,(BitAction)BitValue);
     }
     
void Myspi_W_MOSI(uint8_t BitValue)
     {
       GPIO_WriteBit(GPIOA,GPIO_Pin_7,(BitAction)BitValue);
     }
     
     
uint8_t Myspi_R_MISO(uint8_t BitValue)
     {
      return GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_6);
     }
     
void Myspi_Init(void)
{

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
  
  GPIO_InitTypeDef GPIO_InitStructure;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_7;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOA,&GPIO_InitStructure);
    
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //input 浮空or上拉
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOA,&GPIO_InitStructure);
    
  Myspi_W_SS(1);
    Myspi_W_SCK(0);//模式0
}

void Myspi_Start(void)
{
  Myspi_W_SS(0);
}

void Myspi_Stop(void)
{
  Myspi_W_SS(1);
}

uint8_t Myspi_SwapByte(uint8_t ByteSend)//主出,从出
{
uint8_t i;//ByteReceive = 0x00;
    
//    for(i =0;i<0;i++)
//    {
//    Myspi_W_MOSI(ByteSend & (0x80>>i));//7bit  主发
//    Myspi_W_SCK(1);
//    if(Myspi_R_MISO( ) == 1){ ByteReceive |=  0x80;} //主收
//    Myspi_W_SCK(0);}
    
    //Myspi_W_MOSI(ByteSend & 0x40);//6
    
        for(i =0;i<8;i++)
    {
    Myspi_W_MOSI(ByteSend & 0x80);//7bit  主发  
  ByteSend <<=1;
    Myspi_W_SCK(1);
    if(Myspi_R_MISO() == 1){ByteSend|=0x01;} //主收 由从机位决定
    Myspi_W_SCK(0);}

    //return ByteReceive;
    return  ByteSend;
}



  • 写回答

2条回答 默认 最新

  • 阿里嘎多学长 2024-03-21 18:38
    关注

    以下内容由CHATGPT及阿里嘎多学长共同生成、有用望采纳:


    这个错误提示 #165too few arguments in function call 在 C 语言中意味着你尝试调用一个函数时没有提供足够的参数,即实际参数的数量少于函数声明中定义的形式参数数量。从你提供的图片来看,问题出在 HAL_UART_Transmit 函数的调用上。

    在 STM32 的 HAL 库中,HAL_UART_Transmit 函数通常需要两个参数:一个 UART_HandleTypeDef 指针和一个数据缓冲区的指针,以及数据的长度。其基本原型如下:

    HAL_StatusTypeDef HAL_UART_Transmit(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout);
    

    从图片中的错误行来看,你在调用 HAL_UART_Transmit 时只提供了一个参数,这显然不够。你应该提供至少三个参数:UART 的句柄、你要发送的数据的指针,以及你要发送的数据的字节数。

    如果你尝试过不同的参数传递方式但仍然收到相同的错误,可能是以下原因:

    1. 函数原型不匹配:确保你正确包含了对应的头文件,这样编译器才能知道正确的函数原型。
    2. 未初始化的句柄huart 参数通常是一个已经初始化的 UART 设备句柄,确保你在调用之前已经通过 HAL_UART_Init 初始化了它。
    3. 数据指针和长度:确认 pData 是有效的数据缓冲区指针,且 Size 是要发送的字节数。
    4. Timeout 参数:虽然在某些情况下可以使用默认的超时值(0),但通常需要提供一个超时值,确保检查了这一点。

    请检查你的代码,确保调用 HAL_UART_Transmit 时提供了所有必要的参数。例如,一个正确的调用可能看起来像这样:

    HAL_StatusTypeDef status;
    uint8_t my_data[] = "Hello, world!";
    uint32_t timeout = 1000; // 1000ms超时
    
    status = HAL_UART_Transmit(&huart1, my_data, sizeof(my_data) - 1, timeout);
    

    在这个例子中,&huart1 是 UART1 的句柄,my_data 是要发送的数据,sizeof(my_data) - 1 跳过了字符串末尾的 NULL 字符,timeout 是超时时间。如果问题依然存在,那么可能需要查看更广泛的上下文来找出问题所在。

    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 3月22日
  • 修改了问题 3月22日
  • 修改了问题 3月21日
  • 创建了问题 3月21日