icore开发板上的例子光盘下的 \iCore_扩展相关\code\7_uart1_shell工程文件,删除FSMC.c 和RCC.c 两个C文件和H文件
移植步骤:
第一、替换到之前的启动代码,添加startup_stm32f4xx.s 和system_stm32f4xx.c 两个文件。system_stm32f4xx.h可以替代到rcc.h
第二、改写NVIC.c 里的初始化代码。
static int initialize(void)
{
SCB->VTOR = ((unsigned long)0x08000000); //Set the Vector Table base location at 0x08000000
SCB->AIRCR = 0x05FA0000 | 0x400; //
// SysTick_Config(SystemCoreClock / 1000); //ÉèÖÃsystemtickÒ»ºÁÃëÖжÏ
NVIC->IP[39] = 0xf0;
// NVIC->ISER2.B.USART1_ = 1;
// NVIC->ISER2.B.USART2_ = 1;
// NVIC->ISER2.B.USART3_ = 1;
NVIC->ISER[1] |= (1<<(39-32));
// NVIC->ISER[1] |= 0x0080;
return 0;
}
第三、改写usart.c 里的串口初始化函数
static int initialize_usart3(int baudrate)
{
int i;
/* Configure UART3 for 115200 baud */
RCC->AHB1ENR |= ( 1 << 2); /* Enable GPIOC clock */
GPIOC->MODER &= ~( 3 << 20);
GPIOC->MODER |= ( 2 << 20); /* PC10: Alternate function mode */
GPIOC->AFR[1] &= ~(0x0F << 8);
GPIOC->AFR[1] |= ( 7 << 8); /* PC10: Alternate function USART3_TX */
GPIOC->MODER &= ~( 3 << 22);
GPIOC->MODER |= ( 2 << 22); /* PC11: Alternate function mode */
GPIOC->AFR[1] &= ~(0x0F << 12);
GPIOC->AFR[1] |= ( 7 << 12); /* PC11: Alternate function USART3_RX */
RCC->APB1ENR |= ( 1 << 18); /* Enable USART3 clock */
USART3->BRR = 0x016D; /* Configure 115200 baud, @ 42MHz */
USART3->CR3 = 0x0000; /* 8 bit, 1 stop bit, */
USART3->CR2 = 0x0000; /* no parity */
for (i = 0; i < 0x1000; i++) __NOP(); /* avoid unwanted output */
USART3->CR1 = 0x212C;
NVIC_EnableIRQ(USART3_IRQn); //使能USART3中断
return 0;
}
USART3->CR1 = 0x212C; USART3_CR1的第2,3,5,8,13号为全部置1。这句话很重要。参照小船的博客,RXNEIE置位时,ORE=1 or RXNE=1 时产生串口中断;PEIE置位时,An USART interrupt is generated whenever PE=1 in the USART_SR register;详细见STM32F4参考手册。
其实,经实验,NVIC->ISER[1] |= (1<<(39-32));和NVIC_EnableIRQ(USART3_IRQn);这两句话意思是一样的。所以,任选一句都行。
还有一个细节是在工程选项里的C/C++里的Misc Controls 加入--C99。意思是加入C99 的语法规则。 因为类似一下数据结构的赋初始值的时候非常方便。
typedef const struct _COMMAND {
char * command;
void (* function)(void);
const struct _COMMAND * next;
}COMMAND_T;
COMMAND_T cmd_uid = {
.command = "uid",
.function = func_uid,
.next = NULL
};
最终的显示效果如图:
to my happy birthday today !