软件资源如下:结合上述使用到的硬件资源,下面我们着重介绍软件实现流程以及相关配置代码,主要涉及如何移植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)
- {
- }
- }
|