OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 7421|回复: 47

请问我用串口输出验证游戏手柄实验,为什么这个符号只显示个首字母而不会像在LCD上面全部出来?

[复制链接]

25

主题

124

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
269
金钱
269
注册时间
2022-11-1
在线时间
53 小时
发表于 2023-2-14 10:31:03 | 显示全部楼层 |阅读模式
1金钱

最佳答案

查看完整内容[请看2#楼]

发帖时要点插入代码,不然数组序号会变形,还有个地方得改:
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

10

主题

3281

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
8206
金钱
8206
注册时间
2020-5-11
在线时间
3700 小时
发表于 2023-2-14 10:31:04 | 显示全部楼层
wsh15249375668 发表于 2023-2-14 13:14
%s我之前也试了,也不行,这里应该用啥呢

发帖时要点<>插入代码,不然数组序号会变形,还有个地方得改:
  1. (u8)*JOYPAD_SYMBOL_TBL[i]
  2. 你这是把指针强制转为u8,显然不行,得改为:
  3. (u8*)JOYPAD_SYMBOL_TBL[i]

  4. JOYPAD_SYMBOL_TBL[i]
  5. 自己试一下.
复制代码
专治疑难杂症
回复

使用道具 举报

11

主题

2103

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4588
金钱
4588
注册时间
2015-1-10
在线时间
574 小时
发表于 2023-2-14 10:42:35 | 显示全部楼层
代码呢,贴一下
回复

使用道具 举报

25

主题

124

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
269
金钱
269
注册时间
2022-11-1
在线时间
53 小时
 楼主| 发表于 2023-2-14 10:51:16 | 显示全部楼层

const u8*JOYPAD_SYMBOL_TBL[8]=
{"Right","Left","Down","Up","Start","Select","B","A"};//定义手柄按键符号

int main(void)
       
{
u8 i=0,t=0;       
u8 key=0;       
delay_init();
uart_init(115200);
KEY_Init();
LED_Init();
JOYPAD_Init();       
printf("\r\n  JOYPAD  TEXT  \r\n");
       
while(1)
{
        key=JOYPAD_Read();
        if(key)
        {
        printf("\r\n 键值:%d ",key);    //显示键值
        for(i=0;i<8;i++)
                {
                if(key&(0x80>>i))    //
                {
                printf("\r\n 符号:%c",(u8)*JOYPAD_SYMBOL_TBL);  //显示符号
               
       
               
                }
                这是主函数用来显示的代码
回复

使用道具 举报

10

主题

3281

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
8206
金钱
8206
注册时间
2020-5-11
在线时间
3700 小时
发表于 2023-2-14 11:24:05 | 显示全部楼层
傲游截图20230214112344.jpg
专治疑难杂症
回复

使用道具 举报

25

主题

124

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
269
金钱
269
注册时间
2022-11-1
在线时间
53 小时
 楼主| 发表于 2023-2-14 13:14:48 | 显示全部楼层

%s我之前也试了,也不行,这里应该用啥呢
回复

使用道具 举报

11

主题

2103

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4588
金钱
4588
注册时间
2015-1-10
在线时间
574 小时
发表于 2023-2-14 13:24:39 | 显示全部楼层
%c是输出单个字符,传入的是char
回复

使用道具 举报

25

主题

124

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
269
金钱
269
注册时间
2022-11-1
在线时间
53 小时
 楼主| 发表于 2023-2-14 13:36:29 | 显示全部楼层
LcwSwust 发表于 2023-2-14 13:20
发帖时要点插入代码,不然数组序号会变形,还有个地方得改:

好了,感谢大佬
回复

使用道具 举报

25

主题

124

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
269
金钱
269
注册时间
2022-11-1
在线时间
53 小时
 楼主| 发表于 2023-2-14 16:32:41 | 显示全部楼层
LcwSwust 发表于 2023-2-14 13:20
发帖时要点插入代码,不然数组序号会变形,还有个地方得改:

老哥,用游戏手柄控制led、蜂鸣器这些硬件,这样可行不
回复

使用道具 举报

10

主题

3281

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
8206
金钱
8206
注册时间
2020-5-11
在线时间
3700 小时
发表于 2023-2-14 16:48:13 | 显示全部楼层
wsh15249375668 发表于 2023-2-14 16:32
老哥,用游戏手柄控制led、蜂鸣器这些硬件,这样可行不

可行      
专治疑难杂症
回复

使用道具 举报

25

主题

124

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
269
金钱
269
注册时间
2022-11-1
在线时间
53 小时
 楼主| 发表于 2023-2-15 10:01:44 | 显示全部楼层

请问那个串口输出的手柄键值这个是什么啊?怎么出来的这个数值
回复

使用道具 举报

25

主题

124

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
269
金钱
269
注册时间
2022-11-1
在线时间
53 小时
 楼主| 发表于 2023-2-17 10:58:30 | 显示全部楼层

老哥在吗
回复

使用道具 举报

25

主题

124

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
269
金钱
269
注册时间
2022-11-1
在线时间
53 小时
 楼主| 发表于 2023-2-17 10:59:03 | 显示全部楼层
回复

使用道具 举报

10

主题

3281

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
8206
金钱
8206
注册时间
2020-5-11
在线时间
3700 小时
发表于 2023-2-17 11:24:14 | 显示全部楼层

           
专治疑难杂症
回复

使用道具 举报

25

主题

124

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
269
金钱
269
注册时间
2022-11-1
在线时间
53 小时
 楼主| 发表于 2023-2-17 11:26:49 | 显示全部楼层

我想问问读取手柄键值这块代码不用原子提供的,自己写的话?要怎么写?
//读取键值,当有数据传输过来时,电平被拉低,意味着有按键按下
//每给一个脉冲,输出一位数据,输出顺序:
//A->B->SELECT->START->UP->DOWN->LEFT->RIGHT.
//按下为0,松开为1
u8 JOYPAD_Read(void)
{
  vu8 temp=0;
        u8 t;
        JOYPAD_LAT=1;//锁存当前状态,先高
        JOYPAD_Delay(80);  //延时一段时间
        JOYPAD_LAT=0;  //后低

  for(t=0;t<8;t++)  //实际只循环了7次,第一次直接读值
{
  temp>>=1;        //右移1位赋值
        if (JOYPAD_DAT==0)temp|= 0x80;   //得到第一个数据
         JOYPAD_CLK=1;    //每给一个脉冲,得到一个数据
   JOYPAD_Delay(80);
         JOYPAD_CLK=0;
         JOYPAD_Delay(80);
   

}
return temp;
}       
回复

使用道具 举报

10

主题

3281

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
8206
金钱
8206
注册时间
2020-5-11
在线时间
3700 小时
发表于 2023-2-17 11:37:08 | 显示全部楼层
wsh15249375668 发表于 2023-2-17 11:26
我想问问读取手柄键值这块代码不用原子提供的,自己写的话?要怎么写?
//读取键值,当有数据传输过来时 ...

随便怎么写啊,只要功能实现就行。
比如可以像他那样操作引脚输出高低电平、读取电平;也可以用定时器、状态机去操作IO口来实现。
如果你有“手柄”的相关资料、时序图就方便了,可以按你自己的想法去实现。
并非所有器件都有现成的代码,总有些东西得靠自己。
新的东西就需要看手册、时序、自己一步步实现。
专治疑难杂症
回复

使用道具 举报

25

主题

124

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
269
金钱
269
注册时间
2022-11-1
在线时间
53 小时
 楼主| 发表于 2023-2-17 13:39:51 | 显示全部楼层
LcwSwust 发表于 2023-2-17 11:37
随便怎么写啊,只要功能实现就行。
比如可以像他那样操作引脚输出高低电平、读取电平;也可以用定时器、 ...

我看着时序图自己写了下,读不出来键值不知道为啥,
回复

使用道具 举报

25

主题

124

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
269
金钱
269
注册时间
2022-11-1
在线时间
53 小时
 楼主| 发表于 2023-2-17 13:41:33 | 显示全部楼层
wsh15249375668 发表于 2023-2-17 13:39
我看着时序图自己写了下,读不出来键值不知道为啥,

u8 JOYPAD_Read(void)
{

JOYPAD_LAT=1;     //上升沿
JOYPAD_Delay(80);   //延时
JOYPAD_DAT=0;      //数据
JOYPAD_CLK=0;      //时钟
JOYPAD_LAT=0;            //下降沿读A
JOYPAD_Delay(80);                       

JOYPAD_LAT=0;   
JOYPAD_DAT=0;
JOYPAD_CLK=1;
JOYPAD_Delay(80);
JOYPAD_CLK=0;   //读B
JOYPAD_Delay(80);       
       
JOYPAD_LAT=0;   
JOYPAD_DAT=0;
JOYPAD_CLK=1;
JOYPAD_Delay(80);
JOYPAD_CLK=0;   //读Start

这样依次把八个键值的读取,请问哪里出问题了
回复

使用道具 举报

25

主题

124

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
269
金钱
269
注册时间
2022-11-1
在线时间
53 小时
 楼主| 发表于 2023-2-17 13:42:28 | 显示全部楼层
LcwSwust 发表于 2023-2-17 11:37
随便怎么写啊,只要功能实现就行。
比如可以像他那样操作引脚输出高低电平、读取电平;也可以用定时器、 ...

这是时序图
回复

使用道具 举报

10

主题

3281

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
8206
金钱
8206
注册时间
2020-5-11
在线时间
3700 小时
发表于 2023-2-17 14:36:57 | 显示全部楼层

图片一直转圈出不来。
你的代码我没看到有读取,只看到对引脚赋值。
从原子的代码来看,是要让CLK输出8次高低电平,同时读取8次DAT脚电平形成8位数据。
你的代码不完整吗?点击尖括号<>插入代码或上传附件试试。

有没有写过软件模拟SPI或IIC通信?
专治疑难杂症
回复

使用道具 举报

25

主题

124

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
269
金钱
269
注册时间
2022-11-1
在线时间
53 小时
 楼主| 发表于 2023-2-17 16:30:43 | 显示全部楼层
这是.c文件里的完整驱动代码
  1. #include"joypad.h"

  2. //手柄初始化
  3. void JOYPAD_Init(void)
  4. {
  5.   GPIO_InitTypeDef  GPIO_InitStruct;
  6.        
  7.   RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOD,ENABLE);  //使能PB PD端口时钟
  8.        
  9.         GPIO_InitStruct.GPIO_Mode=GPIO_Mode_Out_PP; //推挽输出,一般用于0-3.3v
  10.   GPIO_InitStruct.GPIO_Pin=GPIO_Pin_11;
  11.         GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;
  12.         GPIO_Init(GPIOB,&GPIO_InitStruct);
  13.   GPIO_SetBits(GPIOB,GPIO_Pin_11);//上拉引脚设为高电平
  14.        
  15.         GPIO_InitStruct.GPIO_Mode=GPIO_Mode_IPU;//上拉输入
  16.   GPIO_InitStruct.GPIO_Pin=GPIO_Pin_10;
  17.         GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;//可有可无
  18.         GPIO_Init(GPIOB,&GPIO_InitStruct);
  19.   GPIO_SetBits(GPIOB,GPIO_Pin_11);//上拉
  20.        
  21.         GPIO_InitStruct.GPIO_Mode=GPIO_Mode_Out_PP;
  22.         GPIO_InitStruct.GPIO_Pin=GPIO_Pin_3;
  23.         GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;
  24.         GPIO_Init(GPIOD,&GPIO_InitStruct);
  25.         GPIO_SetBits(GPIOD,GPIO_Pin_3);
  26.        
  27.        
  28. }

  29. //延时
  30. void JOYPAD_Delay(u16 t)
  31. {
  32. while(t--);  //

  33.        
  34. }

  35. //读取键值,当有数据传输过来时,电平被拉低,意味着有按键按下
  36. //每给一个脉冲,输出一位数据,输出顺序:
  37. //A->B->SELECT->START->UP->DOWN->LEFT->RIGHT.
  38. //按下为0,松开为1
  39. u8 JOYPAD_Read(void)
  40. {
  41.   vu8 temp=0;  //中间变量,用来记录接受到的数据
  42.         u8 t;
  43.         JOYPAD_LAT=1;//锁存当前状态,先高
  44.         JOYPAD_Delay(80);  //延时一段时间
  45.         JOYPAD_LAT=0;  //后低

  46.   for(t=0;t<8;t++)  //实际只循环了7次,第一次直接读值
  47. {
  48.   temp>>=1;        //右移1位赋值
  49.         if (JOYPAD_DAT==0)temp|= 0x80;   //得到第一个数据,最高位置1
  50.          JOYPAD_CLK=1;    //每给一个脉冲,得到一个数据
  51.    JOYPAD_Delay(80);
  52.          JOYPAD_CLK=0;
  53.          JOYPAD_Delay(80);
  54.    

  55. }
  56. return temp;
  57. }       
  58. //下面这是我写的,

  59. /*
  60. u8 JOYPAD_Read(void)
  61. {

  62. JOYPAD_LAT=1;     //上升沿
  63. JOYPAD_Delay(80);   //延时
  64. JOYPAD_DAT=0;      //数据
  65. JOYPAD_CLK=0;      //时钟
  66. JOYPAD_LAT=0;            //下降沿读A
  67. JOYPAD_Delay(80);                       

  68. JOYPAD_LAT=0;   
  69. JOYPAD_DAT=0;
  70. JOYPAD_CLK=1;
  71. JOYPAD_Delay(80);
  72. JOYPAD_CLK=0;   //读B
  73. JOYPAD_Delay(80);       
  74.        
  75. JOYPAD_LAT=0;   
  76. JOYPAD_DAT=0;
  77. JOYPAD_CLK=1;
  78. JOYPAD_Delay(80);
  79. JOYPAD_CLK=0;   //读Start
  80.        
  81. JOYPAD_LAT=0;   
  82. JOYPAD_DAT=0;
  83. JOYPAD_CLK=1;
  84. JOYPAD_Delay(80);
  85. JOYPAD_CLK=0;   //读Select

  86. JOYPAD_LAT=0;   
  87. JOYPAD_DAT=0;
  88. JOYPAD_CLK=1;
  89. JOYPAD_Delay(80);
  90. JOYPAD_CLK=0;   //读Up

  91. JOYPAD_LAT=0;   
  92. JOYPAD_DAT=0;
  93. JOYPAD_CLK=1;
  94. JOYPAD_Delay(80);
  95. JOYPAD_CLK=0;   //读Down

  96. JOYPAD_LAT=0;   
  97. JOYPAD_DAT=0;
  98. JOYPAD_CLK=1;
  99. JOYPAD_Delay(80);
  100. JOYPAD_CLK=0;   //读Left

  101. JOYPAD_LAT=0;   
  102. JOYPAD_DAT=0;
  103. JOYPAD_CLK=1;
  104. JOYPAD_Delay(80);
  105. JOYPAD_CLK=0;   //读Right


  106.         }*/
复制代码
回复

使用道具 举报

10

主题

3281

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
8206
金钱
8206
注册时间
2020-5-11
在线时间
3700 小时
发表于 2023-2-18 09:19:10 | 显示全部楼层
本帖最后由 LcwSwust 于 2023-2-18 10:09 编辑
wsh15249375668 发表于 2023-2-17 16:30
这是.c文件里的完整驱动代码

虽然你的注释写了“读A”、“读B”,但我没看到有读的代码,正常的读应当是把引脚输入的电平赋值到某个变量。

有没有试过读取按键?
专治疑难杂症
回复

使用道具 举报

25

主题

124

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
269
金钱
269
注册时间
2022-11-1
在线时间
53 小时
 楼主| 发表于 2023-2-18 12:44:28 | 显示全部楼层
LcwSwust 发表于 2023-2-18 09:19
虽然你的注释写了“读A”、“读B”,但我没看到有读的代码,正常的读应当是把引脚输入的电平赋值到某个变 ...

老哥,那为啥原子自己带的可以读出来,我是少了什么东西啊?
回复

使用道具 举报

10

主题

3281

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
8206
金钱
8206
注册时间
2020-5-11
在线时间
3700 小时
发表于 2023-2-18 13:04:33 | 显示全部楼层
wsh15249375668 发表于 2023-2-18 12:44
老哥,那为啥原子自己带的可以读出来,我是少了什么东西啊?

if (JOYPAD_DAT==0)temp|= 0x80;
就是判断引脚输入电平,然后将值赋给temp的第7位。
专治疑难杂症
回复

使用道具 举报

25

主题

124

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
269
金钱
269
注册时间
2022-11-1
在线时间
53 小时
 楼主| 发表于 2023-2-18 17:11:31 | 显示全部楼层
LcwSwust 发表于 2023-2-18 13:04
if (JOYPAD_DAT==0)temp|= 0x80;
就是判断引脚输入电平,然后将值赋给temp的第7位。

这里我们自己写就要怎么写啊,不懂啊
回复

使用道具 举报

10

主题

3281

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
8206
金钱
8206
注册时间
2020-5-11
在线时间
3700 小时
发表于 2023-2-18 17:23:22 | 显示全部楼层
wsh15249375668 发表于 2023-2-18 17:11
这里我们自己写就要怎么写啊,不懂啊

你要不还是从最基本的IO口读写开始学吧,或者从51单片机开始学。
还要多看单片机的手册,特别是相关功能涉及的寄存器。
专治疑难杂症
回复

使用道具 举报

25

主题

124

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
269
金钱
269
注册时间
2022-11-1
在线时间
53 小时
 楼主| 发表于 2023-3-31 16:20:34 | 显示全部楼层
LcwSwust 发表于 2023-2-18 17:23
你要不还是从最基本的IO口读写开始学吧,或者从51单片机开始学。
还要多看单片机的手册,特别是相关功能 ...

老哥,有空吗
回复

使用道具 举报

10

主题

3281

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
8206
金钱
8206
注册时间
2020-5-11
在线时间
3700 小时
发表于 2023-3-31 16:24:55 | 显示全部楼层

不确定           
专治疑难杂症
回复

使用道具 举报

25

主题

124

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
269
金钱
269
注册时间
2022-11-1
在线时间
53 小时
 楼主| 发表于 2023-4-3 10:19:27 | 显示全部楼层

想问老哥,关于代码的问题,有空了麻烦回下我
回复

使用道具 举报

10

主题

3281

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
8206
金钱
8206
注册时间
2020-5-11
在线时间
3700 小时
发表于 2023-4-3 10:41:49 | 显示全部楼层
wsh15249375668 发表于 2023-4-3 10:19
想问老哥,关于代码的问题,有空了麻烦回下我

问就是了,我会不定时的查看论坛.
专治疑难杂症
回复

使用道具 举报

25

主题

124

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
269
金钱
269
注册时间
2022-11-1
在线时间
53 小时
 楼主| 发表于 2023-4-3 10:46:36 | 显示全部楼层
LcwSwust 发表于 2023-4-3 10:41
问就是了,我会不定时的查看论坛.

我想问问这个工程文件是用来干嘛的,看不太懂
384A5252-6201-4371-B4D5-2142414F4A11.png
回复

使用道具 举报

10

主题

3281

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
8206
金钱
8206
注册时间
2020-5-11
在线时间
3700 小时
发表于 2023-4-3 11:03:18 | 显示全部楼层
wsh15249375668 发表于 2023-4-3 10:46
我想问问这个工程文件是用来干嘛的,看不太懂

哪个文件?main.c?
一般从名字就能猜出来呀.
专治疑难杂症
回复

使用道具 举报

25

主题

124

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
269
金钱
269
注册时间
2022-11-1
在线时间
53 小时
 楼主| 发表于 2023-4-3 11:30:56 | 显示全部楼层
LcwSwust 发表于 2023-4-3 11:03
哪个文件?main.c?
一般从名字就能猜出来呀.

就是这整个工程文件,这是刚发给我的,还是用HAL库写的,我一直用的是固件库,看到这个基本是懵逼的,要把工程文件发给你让你看看吗?
回复

使用道具 举报

10

主题

3281

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
8206
金钱
8206
注册时间
2020-5-11
在线时间
3700 小时
发表于 2023-4-3 11:37:34 | 显示全部楼层
wsh15249375668 发表于 2023-4-3 11:30
就是这整个工程文件,这是刚发给我的,还是用HAL库写的,我一直用的是固件库,看到这个基本是懵逼的,要 ...

那就得问给你工程的人,我和你一样只用标准库,不了解HAL.
专治疑难杂症
回复

使用道具 举报

25

主题

124

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
269
金钱
269
注册时间
2022-11-1
在线时间
53 小时
 楼主| 发表于 2023-4-4 09:29:51 | 显示全部楼层
LcwSwust 发表于 2023-4-3 11:37
那就得问给你工程的人,我和你一样只用标准库,不了解HAL.

老哥,我昨天说的那个HAL库倒是次要,就是里面那个工程文件的格式、外设一大堆加一起的看不太懂它是用来干嘛的,只能大概看懂它是跟电池有关、里面还有一些通信协议
回复

使用道具 举报

10

主题

3281

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
8206
金钱
8206
注册时间
2020-5-11
在线时间
3700 小时
发表于 2023-4-4 09:34:13 | 显示全部楼层
wsh15249375668 发表于 2023-4-4 09:29
老哥,我昨天说的那个HAL库倒是次要,就是里面那个工程文件的格式、外设一大堆加一起的看不太懂它是用来 ...

标准库的工程不也是一大堆?看着都差不多啊。
关键看main里用到了哪些,没用到的函数就有可能不会生成code。
专治疑难杂症
回复

使用道具 举报

25

主题

124

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
269
金钱
269
注册时间
2022-11-1
在线时间
53 小时
 楼主| 发表于 2023-4-4 10:03:09 | 显示全部楼层
LcwSwust 发表于 2023-4-4 09:34
标准库的工程不也是一大堆?看着都差不多啊。
关键看main里用到了哪些,没用到的函数就有可能不会生成co ...

本来想着传上来给你看看,压缩包太大传不了
回复

使用道具 举报

25

主题

124

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
269
金钱
269
注册时间
2022-11-1
在线时间
53 小时
 楼主| 发表于 2023-4-6 14:26:00 | 显示全部楼层
LcwSwust 发表于 2023-4-4 09:34
标准库的工程不也是一大堆?看着都差不多啊。
关键看main里用到了哪些,没用到的函数就有可能不会生成co ...

  /**SPI3 GPIO Configuration
    PA15 (JTDI)     ------> SPI3_NSS
    PC10     ------> SPI3_SCK
    PC11     ------> SPI3_MISO
    PC12     ------> SPI3_MOSI
    */
//    GPIO_InitStruct.Pin = GPIO_PIN_15;
//    GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
//    GPIO_InitStruct.Pull = GPIO_NOPULL;
//    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
//    GPIO_InitStruct.Alternate = GPIO_AF6_SPI3;
//    HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

    GPIO_InitStruct.Pin = GPIO_PIN_10|GPIO_PIN_11|GPIO_PIN_12;
    GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;    //复用推挽输出
    GPIO_InitStruct.Pull = GPIO_NOPULL;
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
    GPIO_InitStruct.Alternate = GPIO_AF6_SPI3;     //?
    HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);

老哥倒数第二行代码啥意思,AF6是什么
回复

使用道具 举报

10

主题

3281

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
8206
金钱
8206
注册时间
2020-5-11
在线时间
3700 小时
发表于 2023-4-6 14:44:41 | 显示全部楼层
wsh15249375668 发表于 2023-4-6 14:26
/**SPI3 GPIO Configuration
    PA15 (JTDI)     ------> SPI3_NSS
    PC10     ------> SPI3_SCK
...

估计是端口复用或重映射。这种问题的一般方法是:查看函数中用到该参数的代码,比如在HAL_GPIO_Init处点右键,点击 go to define of,就会跳到该函数的定义之处,看.Alternate改变了哪些寄存器。
傲游截图20230406144107.jpg
专治疑难杂症
回复

使用道具 举报

25

主题

124

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
269
金钱
269
注册时间
2022-11-1
在线时间
53 小时
 楼主| 发表于 2023-4-6 15:17:49 | 显示全部楼层
LcwSwust 发表于 2023-4-6 14:44
估计是端口复用或重映射。这种问题的一般方法是:查看函数中用到该参数的代码,比如在HAL_GPIO_Init[/bac ...

在HAL_GPIO_Init处点右键,点击 go to define of以后, 只看到这四个的,
/* Check the parameters */
  assert_param(IS_GPIO_ALL_INSTANCE(GPIOx));
  assert_param(IS_GPIO_PIN(GPIO_Init->Pin));
  assert_param(IS_GPIO_MODE(GPIO_Init->Mode));
  assert_param(IS_GPIO_PULL(GPIO_Init->Pull));

  /* Configure the port pins */
不过我找到了这个,它是指的是重映射吗
**
  * @brief   AF 6 selection
  */
#define GPIO_AF6_SPI3          ((uint8_t)0x06)  /* SPI3 Alternate Function mapping   */
#define GPIO_AF6_COMP1         ((uint8_t)0x06)  /* COMP1 Alternate Function mapping   */

/**
回复

使用道具 举报

10

主题

3281

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
8206
金钱
8206
注册时间
2020-5-11
在线时间
3700 小时
发表于 2023-4-6 16:01:18 | 显示全部楼层
wsh15249375668 发表于 2023-4-6 15:17
在HAL_GPIO_Init处点右键,点击 go to define of以后, 只看到这四个的,
/* Check the parameters */
...

HAL_GPIO_Init这个函数的代码肯定不只那四行。
应是类似标准库那种:
傲游截图20230406155948.jpg
专治疑难杂症
回复

使用道具 举报

25

主题

124

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
269
金钱
269
注册时间
2022-11-1
在线时间
53 小时
 楼主| 发表于 2023-4-6 17:13:41 | 显示全部楼层
LcwSwust 发表于 2023-4-6 16:01
HAL_GPIO_Init这个函数的代码肯定不只那四行。
应是类似标准库那种:

找到了是GPIO的AFR寄存器,这里是复用功能,谢谢老哥
回复

使用道具 举报

25

主题

124

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
269
金钱
269
注册时间
2022-11-1
在线时间
53 小时
 楼主| 发表于 2023-4-7 09:59:56 | 显示全部楼层
LcwSwust 发表于 2023-4-6 16:01
HAL_GPIO_Init这个函数的代码肯定不只那四行。
应是类似标准库那种:

void SysTick_Handler(void)
{
  /* USER CODE BEGIN SysTick_IRQn 0 */

  /* USER CODE END SysTick_IRQn 0 */
  HAL_IncTick();   //
#if (INCLUDE_xTaskGetSchedulerState == 1 )
  if (xTaskGetSchedulerState() != taskSCHEDULER_NOT_STARTED)
  {
#endif /* INCLUDE_xTaskGetSchedulerState */
  xPortSysTickHandler();
#if (INCLUDE_xTaskGetSchedulerState == 1 )
  }
#endif /* INCLUDE_xTaskGetSchedulerState */
  /* USER CODE BEGIN SysTick_IRQn 1 */

  /* USER CODE END SysTick_IRQn 1 */
}
老哥这段代码又是啥意思啊,HAL_IncTick();  这个是用来干嘛的
回复

使用道具 举报

10

主题

3281

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
8206
金钱
8206
注册时间
2020-5-11
在线时间
3700 小时
发表于 2023-4-7 10:02:21 | 显示全部楼层
wsh15249375668 发表于 2023-4-7 09:59
void SysTick_Handler(void)
{
  /* USER CODE BEGIN SysTick_IRQn 0 */

还是上面那个方法,看它的源代码。
专治疑难杂症
回复

使用道具 举报

25

主题

124

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
269
金钱
269
注册时间
2022-11-1
在线时间
53 小时
 楼主| 发表于 2023-4-10 10:19:27 | 显示全部楼层
LcwSwust 发表于 2023-4-7 10:02
还是上面那个方法,看它的源代码。

老哥,能加你个微信吗?
回复

使用道具 举报

10

主题

3281

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
8206
金钱
8206
注册时间
2020-5-11
在线时间
3700 小时
发表于 2023-4-10 10:54:00 | 显示全部楼层
wsh15249375668 发表于 2023-4-10 10:19
老哥,能加你个微信吗?

可以加QQ:0x1ACCCF77 转为十进制
专治疑难杂症
回复

使用道具 举报

25

主题

124

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
269
金钱
269
注册时间
2022-11-1
在线时间
53 小时
 楼主| 发表于 2023-4-10 16:36:26 | 显示全部楼层
LcwSwust 发表于 2023-4-10 10:54
可以加QQ:0x1ACCCF77 转为十进制

老哥,加你了
回复

使用道具 举报

10

主题

3281

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
8206
金钱
8206
注册时间
2020-5-11
在线时间
3700 小时
发表于 2023-4-10 16:46:59 | 显示全部楼层
本帖最后由 LcwSwust 于 2023-4-10 16:50 编辑

你是“相识”?没有说明来意,我以为是广告。
专治疑难杂症
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-24 12:32

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表