软件资源如下:结合上述使用到的硬件资源,下面我们着重介绍软件实现流程以及相关配置代码,主要涉及如何移植shell的输入输出以及如何执行命令。 以下为主函数初始化配置及相关全局变量定义内容,代码如下:
void LED_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_AHBPeriphclockCmd(RCC_AHBPeriph_GPIOA, ENABLE); //开启GPIOA时钟
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOA, &GPIO_InitStructure);
LED1_OFF();
}
void uart_nvic_init(u32 bound)
{
//>>>GPIO端口设置>>>
GPIO_InitTypeDef GPIO_InitStructure;
UART_InitTypeDef UART_InitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
//>>>使能外设时钟>>>
RCC_APB2PeriphClockCmd(RCC_APB2Periph_UART1, ENABLE); //使能UART1
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE); //开启GPIOA时钟
//>>>UART1 NVIC 配置>>>
NVIC_InitStructure.NVIC_IRQChannel = UART1_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPriority = 3; //子优先级3
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道使能
NVIC_Init(&NVIC_InitStructure); //根据指定的参数初始化NVIC寄存器
//>>>UART的GPIO复用功能配置>>>
GPIO_PinAFConfig(GPIOA, GPIO_PinSource9, GPIO_AF_1);
GPIO_PinAFConfig(GPIOA, GPIO_PinSource10, GPIO_AF_1);
//>>>UART 初始化设置>>>
UART_InitStructure.UART_BaudRate = bound;//串口波特率
UART_InitStructure.UART_WordLength = UART_WordLength_8b;//字长为8位数据格式
UART_InitStructure.UART_StopBits = UART_StopBits_1;//一个停止位
UART_InitStructure.UART_Parity = UART_Parity_No;//无奇偶校验位
UART_InitStructure.UART_HardwareFlowControl = UART_HardwareFlowControl_None;//无硬件数据流控制
UART_InitStructure.UART_Mode = UART_Mode_Rx | UART_Mode_Tx; //收发模式
UART_Init(UART1, &UART_InitStructure); //初始化串口1
UART_ITConfig(UART1, UART_IT_RXIEN, ENABLE);//开启串口接受中断
UART_Cmd(UART1, ENABLE); //使能串口1
//>>>UART1_TX GPIOA.9>>> UART1_RX GPIOA.10>>>
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; //PA.9
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用推挽输出
GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化GPIOA.9
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;//PA10
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOAtiNG;//浮空输入
GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化GPIOA.10
}
//>>>UART发送一个字节 >>>
void Uart_PutChar(char chByte)
{
while ((UART1->CSR & UART_IT_TXIEN) == 0);
UART1->TDR = (chByte & (uint16_t)0x00FF);
}
//>>>UART 发送字符串>>>
void Uart_PutBuff(uint8_t *pchBuff, uint32_t wLen)
{
while (wLen--) {
Uart_PutChar(*pchBuff);
pchBuff++;
}
}
//>>>main主函数 >>>
int main(void)
{
delay_init();
LED_Init();
uart_nvic_init(115200); //串口初始化为115200
//uart_shell.read = shellRead;
uart_shell.write = Uart_PutChar;
shellInit(&uart_shell);//shell初始化
while (1)
{
}
}
|