OpenEdv-开源电子网

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

问两个调试当中遇到的问题。

[复制链接]

4

主题

16

帖子

0

精华

初级会员

Rank: 2

积分
52
金钱
52
注册时间
2013-5-13
在线时间
0 小时
发表于 2013-5-16 11:04:59 | 显示全部楼层 |阅读模式
拿到板子之后很顺利就调通了Mini+7寸电容触屏的实验,大赞原子兄提供的丰富资料和视频。

http://www.thoughts-of.me/entry.php?id=470

这里我想请教两个调试当中遇到的问题:

1. 在串口部分的初始化配置中,程序是给port A9作为输出的TX口, port A10作为浮动输入的RX口:
    /* Configure USART Tx as alternate function push-pull */
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOA, &GPIO_InitStructure);

    /* Configure USART Rx as input floating */
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
    GPIO_Init(GPIOA, &GPIO_InitStructure);
但是我看了Mini板的原理图,加上条线冒之后不是应该port A9为RX 而 port A10为TX口吗? 难道哪里弄反了吗?

2. 一个很神奇的问题,在电容触屏扩展实验源文件的lcd.h里面有这样一个宏:

#define LCD_WR_DATA(data) \
    {LCD_RS_SET;\
    LCD_CS_CLR;\
    GPIOB->ODR = data;\
    LCD_WR_CLR;\
    LCD_WR_SET;\
    LCD_CS_SET;} 

我如果把他注释掉,用函数实现就清屏的时候颜色只能 有一小个竖条改变,我想可能是写成函数速度慢的原因吧,不过我把以上宏改成:

#define LCD_WR_DATA(data) \
    LCD_RS_SET;\
    LCD_CS_CLR;\
    GPIOB->ODR = data;\
    LCD_WR_CLR;\
    LCD_WR_SET;\
    LCD_CS_SET

居然也不行!难道那两个大括号有什么神秘的作用吗?!


本人学生一枚,很多知识可能没有学扎实,还请大家帮助!







正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

头像被屏蔽

6168

主题

7036

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
19705
金钱
19705
注册时间
2012-12-27
在线时间
25 小时
发表于 2013-5-16 11:19:05 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

4

主题

16

帖子

0

精华

初级会员

Rank: 2

积分
52
金钱
52
注册时间
2013-5-13
在线时间
0 小时
 楼主| 发表于 2013-5-16 11:34:03 | 显示全部楼层
分号可以不要呀,因为调用的时候 LCD_WR_DATA(data);后面都带有一个分号的。
回复 支持 反对

使用道具 举报

36

主题

1263

帖子

1

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1612
金钱
1612
注册时间
2012-6-15
在线时间
39 小时
发表于 2013-5-16 11:45:20 | 显示全部楼层
跟调用 有关, 调用的时候 需要加{}

否则可以做成这种 
#define ... \
do{\
...
}while(0) 形式
回复 支持 反对

使用道具 举报

4

主题

16

帖子

0

精华

初级会员

Rank: 2

积分
52
金钱
52
注册时间
2013-5-13
在线时间
0 小时
 楼主| 发表于 2013-5-16 12:24:38 | 显示全部楼层
楼上的这种技巧很常见,但神奇就神奇在那个大括号为什么是合法的。

电容触屏扩展实验源文件的blcd.c文件都是这样调用这个宏的:
LCD_WR_DATA(x);
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-5-16 14:11:11 | 显示全部楼层
回复【5楼】tk:
---------------------------------
大括号不是很正常么?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

4

主题

16

帖子

0

精华

初级会员

Rank: 2

积分
52
金钱
52
注册时间
2013-5-13
在线时间
0 小时
 楼主| 发表于 2013-5-16 14:42:26 | 显示全部楼层
当然不正常了,类似
#include <stdio.h>

#define HELLO {\
    printf("hello world!\n"); \
    }

int
main()
{
    HELLO;
    return 0;
}
这样的程序,原子哥你可以试一试,在Keil下居然可以编译过去,但是gcc肯定编译不过去呀。

这还不是问题的重点,问题的重点是我在1楼提到的,非要宏LCD才能正常清屏,而且宏里面的大括号不可缺少!

到目前为止我的两个问题都还不知道是什么原因,请原子哥抽空再帮忙看看!
回复 支持 反对

使用道具 举报

4

主题

16

帖子

0

精华

初级会员

Rank: 2

积分
52
金钱
52
注册时间
2013-5-13
在线时间
0 小时
 楼主| 发表于 2013-5-16 14:48:02 | 显示全部楼层
我的问题其实就两个,
1  Mini板pcb的串口Rx和Tx是不是反了
2  LCD_WR_DATA这个东西为什么非要宏实现,用函数就不行?

自己顶。
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-5-16 16:39:00 | 显示全部楼层
回复【8楼】tk:
---------------------------------
1,RX,TX看面相对象是谁了,加入对STM32来说,是RXD和TXD,那么对外面的器件来说,那就是应该接到它的TXD和RXD了。
2,我改成:
#define LCD_WR_DATA(data)\
LCD_RS_SET;\
LCD_CS_CLR;\
DATAOUT(data);\
LCD_WR_CLR;\
LCD_WR_SET;\
LCD_CS_SET;
 运行正常。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

4

主题

16

帖子

0

精华

初级会员

Rank: 2

积分
52
金钱
52
注册时间
2013-5-13
在线时间
0 小时
 楼主| 发表于 2013-5-16 18:13:11 | 显示全部楼层
谢谢原子哥的回复,不过Mini板2.0印着的就是pa9对应rxd,pa10对应txd,这的确让我产生了误解。

至于第二个问题,我再次确定我这里的确运行结果不一致。我把工程传上来了(相对于原来的,删减了选择测试模式的那些内容,可以不用sd卡直接进入第一个测试,也就是那个白屏画画测试)
原子哥可以看一看。

扩展实验24 ATK-7' TFTLCD电容触摸屏模块测试实验.rar

733.48 KB, 下载次数: 125

回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-7-20 04:21

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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