历史上的今天
今天是:2025年03月09日(星期日)
2019年03月09日 | 成功移植icore的shell串口到STM32F4
2019-03-09 来源:eefocus
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 !
上一篇:STM32:DAC配置以及使用
史海拾趣
|
从接触STM32以来,一直都是在IAR For ARM 4.22A环境下进行开发。因为以前用过IAR For MSP430,对IAR的开发环境比较熟悉,再加上万利板子提供的例程都是IAR的,用起来也还顺手。 直到前一阵参加了一个ARM的研讨会,会上英蓓特极力推荐RealView MDK中 ...… 查看全部问答> |
|
平台是 pxa270+wince 6.0 当休眠,再唤醒后, SD卡的盘符就丢失了, 重新插拔也显示不了 根据串口输出信息,SD驱动在Powerup的时候执行了一个函数SimulateCardInsertion,这个函数已经模拟了一次SD卡的插拔过程,通过串口信息也发现这个函数被正 ...… 查看全部问答> |
|
短接网线的1,3和2,6号线,能造成交换机端口连接上的现象吗? 请教大家一个问题:如果将网线的一头作成正常的网线接头,另一头的线路将1,3号线短接,2,6号线短接,接在交换机的一个端口上,会出现什么样的情况?交换机会不会不能工作? 非常感谢大家… 查看全部问答> |
|
常规心电图记录仪是医生诊断心脏疾病的主要手段之一,但它仅能记录短暂心搏情况。由于在相当多的情况下难以记录到即刻发作时的心电图改变,导致无法作出正确的诊断和治疗。因此对病人进行长时间的心电图记录有着极其重要的临床价值。而微型动态心电 ...… 查看全部问答> |
|
小弟是刚接触layout,对于在PCB布线时,应该要注意哪些问题,比如说针对不同的信号线长、线距等等, 因为看过一些书,都是概念性的话,在实际操作感觉不上手。 所以想请教目前比较通用的一些设计准则。 PS:我是做NOTEBO ...… 查看全部问答> |
|
把自己收集的固件库资料分享给大家,免费下载! [local]1[/local][local]2[/local][local]3[/local][local]4[/local][local]5[/local][local]6[/local][local]7[/local]… 查看全部问答> |




