硬件平台: ST公司的stm32f429i-discovery
u-boot: emcraft网站提供的u-boot 2010.03
linux: emcraft网站提供的uclinux
我的stm32f429i-discovery刚到手就让我将USART1的RX管脚给烧坏了,我将串口线的RS232电平直接接到了stm32芯片上,好蠢。+/-12V直接怼到3.3V的管脚上,不烧坏才怪呢。没得办法,只能改用其它的串口,我选着使用USART2来代替USART1.
u-boot部分
修改
u-boot/include/configs/stm32f429-discovery.h 文件
原文件:
/*
* Serial console configuration
*/
#define CONFIG_STM32_USART_CONSOLE
#define CONFIG_STM32_USART_PORT 1 /* USART1 */
#define CONFIG_STM32_USART_TX_IO_PORT 0 /* PORTA */
#define CONFIG_STM32_USART_TX_IO_PIN 9 /* GPIO9 */
#define CONFIG_STM32_USART_RX_IO_PORT 0 /* PORTA */
#define CONFIG_STM32_USART_RX_IO_PIN 10 /* GPIO10 */
#define CONFIG_BAUDRATE 115200
#define CONFIG_SYS_BAUDRATE_TABLE { 9600, 19200, 38400, 57600, 115200 }
修改后:
/*
* Serial console configuration
*/
#define CONFIG_STM32_USART_CONSOLE
#define CONFIG_STM32_USART_PORT 2 /* USART2 */
#define CONFIG_STM32_USART_TX_IO_PORT 3 /* PORTD */
#define CONFIG_STM32_USART_TX_IO_PIN 5 /* GPIO5 */
#define CONFIG_STM32_USART_RX_IO_PORT 3 /* PORTD */
#define CONFIG_STM32_USART_RX_IO_PIN 6 /* GPIO6 */
#define CONFIG_BAUDRATE 115200
#define CONFIG_SYS_BAUDRATE_TABLE { 9600, 19200, 38400, 57600, 115200 }
修改后编译就好了。
make stm32f429-discovery \从新生成配置文件
make
这时生成的u-boot.bin使用的就是USART2了,但是Linux kernel使用的 还依然是USART1,这时你会发现u-boot有输出,kernel没有输出。
kernel 部分
第一步:
在Linux源码根目录下执行:
make menuconfig
选择
System Type ---> STM32 I/O interfaces --->
去掉USART1,使能USART2.
第二步:
修改u-boot里的环境变量bootargs,将ttyS0改为ttyS1就好了。
原bootargs:
修改后的bootargs:
第三步:
inittab这个文件也要修改。
找到这个文件,可能叫
inittab
也可能叫
inittab.ALL
,将里面的ttyS0改成ttyS1就可以了。
Linux内核引导完成后会调用init函数,而init函数需要一个配置文件inittab。
此时再启动,Linux就可以正常的在USART2上输出了!