银杏科技有限公司旗下技术文档发布平台 | |||
技术支持电话 | 0379-69926675-801 | ||
技术支持邮件 | Gingko@vip.163.com | ||
版本 | 日期 | 作者 | 修改内容 |
---|---|---|---|
V1.0 | 2020-11-06 | gingko | 初次建立 |
1.在主界面选择File–>New Project或者直接点击ACCEE TO MCU SELECTOR 2.出现芯片型号选择,搜索自己芯片的型号,双击型号,或者点击Start Project进入配置 在搜索栏的下面,提供的各 种查找方式,可以选择芯片内核,型号等等,可以帮助你查找芯片。本实验选取的芯片型号为:STM32F429IGHx。 3.配置RCC,使用外部时钟源 4.配置调试引脚 5.将LED对应的3个引脚(PH14,PI3,PI4)设置为GPIO_Output 6.引脚模式配置 7.设置串口
8.时钟源设置,选择外部高速时钟源,配置为最大主频 9.工程文件的设置, 这里就是工程的各种配置,我们只用到有限几个,其他的默认即可。IDE我们使用的是 MDK V5.27。 10.点击Code Generator,进行进一步配置
UART简介
UART特点
串口命令如下表:
LED_RED_ON\cr\lf | LED红灯亮 |
LED_RED_OFF\cr\lf | LED红灯灭 |
LED_BLUE_ON\cr\lf | LED蓝灯亮 |
LED_BLUE_OFF\cr\lf | LED蓝灯灭 |
LED_GREEN_ON\cr\lf | LED绿灯亮 |
LED_GREEN_OFF\cr\lf | LED绿灯灭 |
int main(void) { int i; char buffer[20]; HAL_Init(); SystemClock_Config(); MX_GPIO_Init(); MX_USART1_Init(); usart1.initialize(115200); usart1.printf("Hello, I am iCore3L\r\n"); while (1) { if(usart1.receive_ok_flag==1){ //接收完成 usart1.receive_ok_flag = 0; for(i = 0;i < 20;i++){ buffer[i] = tolower(usart1.receive_buffer[i]); } //比较接收信息 } if(memcmp(buffer,"led_red_on",strlen("led_red_on")) == 0){ LED_RED_ON; usart1.printf("ok!\r\n"); } if(memcmp(buffer,"led_red_off",strlen("led_red_off")) == 0){ LED_RED_OFF; usart1.printf("ok!\r\n"); } if(memcmp(buffer,"led_green_on",strlen("led_green_on")) == 0){ LED_GREEN_ON; usart1.printf("ok!\r\n"); } if(memcmp(buffer,"led_green_off",strlen("led_green_off")) == 0){ LED_GREEN_OFF; usart1.printf("ok!\r\n"); } if(memcmp(buffer,"led_blue_on",strlen("led_blue_on")) == 0){ LED_BLUE_ON; usart1.printf("ok!\r\n"); } if(memcmp(buffer,"led_blue_off",strlen("led_blue_off")) == 0){ LED_BLUE_OFF; usart1.printf("ok!\r\n"); } } }
UART_HandleTypeDef huart1;
UART的名称定义,这个结构体中存放了UART所有用到的功能,后面的别名就是我们所用的uart串口的别名
typedef struct __USART_HandleTypeDef { USART_TypeDef *Instance; //UART寄存器基地址 UART_InitTypeDef Init; //UART通讯参数 uint8_t * pTxBuffPtr; //指向UART Tx传输缓冲区的指针 uint16_t TxXferSize; //UART Tx传输大小 __IO uint16_t TxXferCount; //UART Tx传输计数器 uint8_t * pRxBuffPtr; //指向UART Rx传输缓冲区的指针 uint16_t RxXferSize; //UART Rx传输大小 __IO uint16_t RxXferCount; //UART Rx传输计数器 DMA_HandleTypeDef * hdmatx; //UART Tx DMA句柄参数 DMA_HandleTypeDef * hdmarx; //UART Rx DMA句柄参数 HAL_LockTypeDef Lock; //锁定对象 __IO HAL_UART_StateTypeDef gState; //与全局句柄管理有关的UART状态信息并且与Tx操作有关。 __IO HAL_UART_StateTypeDef RxState; //与Rx操作有关的UART状态信息 __IO uint32_t ErrorCode; //UART错误代码 } UART_HandleTypeDef;
HAL_UART_Transmit(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout)
功能: 串口发送指定长度的数据。如果超时没发送完成,则不再发送,返回超时标志(HAL_TIMEOUT)。 参数:
HAL_UART_Receive_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size)
功能:
参数:
大致过程:
HAL_UART_IRQHandler(UART_HandleTypeDef *huart); //串口中断处理函数 HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart); //串口发送中断回调函数 HAL_UART_TxHalfCpltCallback(UART_HandleTypeDef *huart); //串口发送一半中断回调函数(用的较少) HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart); //串口接收中断回调函数 HAL_UART_RxHalfCpltCallback(UART_HandleTypeDef *huart); //串口接收一半回调函数(用的较少) HAL_UART_ErrorCallback(); //串口接收错误函数
HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart);
功能:
参数:
HAL_UART_IRQHandler(UART_HandleTypeDef *huart);
功能:
HAL_UART_GetState(); //判断UART的接收是否结束,或者发送数据是否忙碌
__HAL_RCC_USART1_CLK_ENABLE(); __HAL_RCC_GPIOA_CLK_ENABLE(); __HAL_RCC_GPIOB_CLK_ENABLE(); GPIO_InitStruct.Pin = GPIO_PIN_3; //ARM上的PB3脚为USART1_RX GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; GPIO_InitStruct.Alternate = GPIO_AF7_USART1; HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); GPIO_InitStruct.Pin = GPIO_PIN_15; //ARM上的PA15脚为USART1_TX GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; GPIO_InitStruct.Alternate = GPIO_AF7_USART1; HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);