i.MX6ULL终结者串口通信例程编译及运行

我们打开工程目录下的Makefile文件,在里面输入下面的内容:

  1 CROSS_COMPILE   ?= arm-linux-gnueabihf-
  2 TARGET                  ?= uart
  3 
  4 CC := $(CROSS_COMPILE)gcc
  5 LD := $(CROSS_COMPILE)ld
  6 OBJCOPY                 := $(CROSS_COMPILE)objcopy
  7 OBJDUMP                 := $(CROSS_COMPILE)objdump
  8 
  9 LIBPATH: = -lgcc -L /usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/lib/gcc/arm    -linux-gnueabihf/4.9.4
 10 
 11 
 12 INCDIRS                 := core \
 13                                    drivers/clk \
 14                                    drivers/led \
 15                                    drivers/delay \
 16                                    drivers/beep \
 17                                    drivers/gpio \
 18                                    drivers/key  \
 19                                    drivers/exit \
 20                                    drivers/int  \
 21                                    drivers/epittimer    \
 22                                    drivers/keyfilter    \
 23                                    drivers/uart
 24 
 25 SRCDIRS := ./   \
 26                                    drivers/clk \
 27                                    drivers/led \
 28                                    drivers/delay \
 29                                    drivers/beep \
 30                                    drivers/gpio \
 31                                    drivers/key  \
 32                                    drivers/exit \
 33                                    drivers/int  \
 34                                    drivers/epittimer    \
 35                                    drivers/keyfilter    \
 36                                    drivers/uart
 37 
 38 
 39 INCLUDE := $(patsubst %, -I %, $(INCDIRS))
 40 
 41 SFILES := $(foreach dir, $(SRCDIRS), $(wildcard $(dir)/*.S))
 42 CFILES := $(foreach dir, $(SRCDIRS), $(wildcard $(dir)/*.c))
 43 
 44 SFILENDIR := $(notdir  $(SFILES))
 45 CFILENDIR := $(notdir  $(CFILES))
 46 
 47 SOBJS := $(patsubst %, output/%, $(SFILENDIR:.S=.o))
 48 COBJS := $(patsubst %, output/%, $(CFILENDIR:.c=.o))
 49 OBJS := $(SOBJS) $(COBJS)
 50 
 51 VPATH := $(SRCDIRS)
 52 
 53 .PHONY: clean
 54         
 55 $(TARGET).bin : $(OBJS)
 56         $(LD) -Timx6ul.lds -o $(TARGET).elf $^ $(LIBPATH)
 57         $(OBJCOPY) -O binary -S $(TARGET).elf $@
 58 
 59 $(SOBJS) : output/%.o : %.S
 60         $(CC) -Wall -nostdlib -c -O2  $(INCLUDE) -o $@ $<
 61 
 62 $(COBJS) : output/%.o : %.c
 63         $(CC) -Wall -nostdlib -c -O2  $(INCLUDE) -o $@ $<
 64         
 65 clean:
 66         rm -rf $(TARGET).elf $(TARGET).dis $(TARGET).bin $(COBJS) $(SOBJS)

上面的Makefile文件主要修改了下面几个地方:
1.第2行的TARGET赋值修改成uart
2.第9行增加了数学库,在uart.c的串口初始化函数中我们使用了除法运算,所以在链接的时候需要制定编译器的数学库,第九行我们定义了LIBPATH变量保存数学库的目录。
3.第23行增加了drivers/uart目录下的.h文件到INCDIRS。
4.第36行增加了drivers/uart目录下的.c文件到SRCDIRS。
5.第56行在链接的时候增加了LIBPATH变量。

我们的链接文件保持不变。
最后我们在终端输入“make”命令开始编译工程,如图 1所示:
在这里插入图片描述

图 1

编译完成会生成uart.bin文件,如图 2所示:
在这里插入图片描述

图 2

然后在终端输入命令“chmod 777 create_imx”修改create_imx文件具有可执行权限,如图 3所示:
在这里插入图片描述

图 3

最后在终端运行命令“./create_imx uart.bin”生成最终的镜像文件“bare.imx”,如图 4所示:
在这里插入图片描述

图 4

然后我们将生成的bare.imx文件通过SSH软件拷贝到mfg烧写工具内对应目录下,这一步可以参考前面的烧写章节。将拨码开关切换成烧写模式,上电烧写等待烧写完成,然后将拨码开关切换回启动模式,等待代码正常运行,然后我们在电脑的Windows系统下打开SecureCRT软件,点击“File->QuickConnect…”,打开快速连接界面链接协议选择“Serial”,端口选择开发板的USB转串口对应的COM口(我这里是COM5),波特率设置成115200,不要流控,最终的设置如图 5所示:
在这里插入图片描述

图 5

然后点击“Connect”按钮以后,串口连接就建立好了,然后我们给开发板上电,可以看到SecureCRT收到开发板串口发送的数据了,如图 6所示:
在这里插入图片描述

图 6

我们可以看到SecureCRT打印的信息显示乱码,这是因为编码方式设置的不对,我们在SevureCRT软件的菜单栏找到Options选项,然后点击Options,找到Session Options选项,然后点击它,打开“Session Options”对话框。我们在该对话框的作则找到“Appearance”选项,点击它。然后在右边对话框找到“Character encoding”选项,将该选项修改为“UTF-8”,如图 7所示:
在这里插入图片描述

图 7

设置完成以后,开发板重新上电,我们看到SecureCRT中文显示正常了,如图 8所示:
在这里插入图片描述

图 8

我们可以根据提示,按键盘的任意按键,输入一个字符给开发板,开发板收到这个字符通过串口又发送出来,最后显示在了SecureCRT的串口界面了,如图 9所示:
在这里插入图片描述

图 9

至此,我们的UART例程就完成了,在后面的实验中,我们可以通过串口打印信息的方式来协助我们调试程序了。在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_46635880/article/details/109110134