icore開發闆上的例子CD光牒下的 \iCore_擴充相關\code\7_uart1_shell工程檔案,删除FSMC.c 和RCC.c 兩個C檔案和H檔案
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiI0NXYFhGd192UvwVe0lmdhJ3ZvwFM38CXlZHbvN3cpR2Lc1TPB10QGtWUCpEMJ9CXsxWam9CXwADNvwVZ6l2c052bm9CXUJDT1wkNhVzLcRnbvZ2Lc1zZyImdsNjW1lzVlZXUYpVd1kmYr50MZV3YyI2cKJDT29GRjBjUIF2LcRHelR3LcJzLctmch1mclRXY39TMzUzMygDNxIDNwgDMzEDMy8CX0Vmbu4GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.jpg)
移植步驟:
第一、替換到之前的啟動代碼,添加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 !