银杏科技有限公司旗下技术文档发布平台 | |||
技术支持电话 | 0379-69926675-801 | ||
技术支持邮件 | Gingko@vip.163.com | ||
版本 | 日期 | 作者 | 修改内容 |
---|---|---|---|
V1.0 | 2020-1-16 | gingko | 初次建立 |
1. 新建工程:在主界面选择File–>New Project 或者直接点击ACCEE TO MCU SELECTOR 2. 出现芯片型号选择,搜索自己芯片的型号,双击型号,或者点击Start Project进入配置 在搜索栏的下面,提供的各 种查找方式,可以选择芯片内核,型号,等等,可以帮助你查找芯片。本实验选取的芯片型号为:STM32F407IGTx。 3. 配置RCC,使用外部时钟源 4. 配置调试引脚 5. 将LED对应的3个引脚(PI5,PI6,PI7)设置为GPIO_Output 6. 引脚模式配置 7. 设置串口
8. 时钟源设置,选择外部高速时钟源,配置为最大主频 9. 工程文件的设置, 这里就是工程的各种配置 我们只用到有限几个,其他的默认即可 IDE我们使用的是 MDK5 10. 点击Code Generator,进行进一步配置
LED_RED_ON\r\n | LED红灯亮 |
LED_RED_OFF\r\n | LED红灯灭 |
LED_BLUE_ON\r\n | LED蓝灯亮 |
LED_BLUE_OFF\r\n | LED蓝灯灭 |
LED_GREEN_ON\r\n | LED绿灯亮 |
LED_GREEN_OFF\r\n | LED绿灯灭 |
int main(void) { int i; char buffer[20]; HAL_Init(); SystemClock_Config(); //配置系统时钟 MX_GPIO_Init(); //初始化GPIO MX_UART4_Init(); usart4.initialize(9600); //串口波特率设置 usart4.printf("Hello, I am iCore3!\r\n"); //串口信息输出 while (1) { if(usart4.receive_ok_flag){ //接收完成 usart4.receive_ok_flag = 0; for(i = 0;i < 20;i++){ buffer[i] = tolower(usart4.receive_buffer[i]); } //比较接收信息 if(memcmp(buffer,"led_red_on",strlen("led_red_on")) == 0){ LED_RED_ON; usart4.printf("ok!\r\n"); } if(memcmp(buffer,"led_red_off",strlen("led_red_off")) == 0){ LED_RED_OFF; usart4.printf("ok!\r\n"); } if(memcmp(buffer,"led_green_on",strlen("led_green_on")) ==0){ LED_GREEN_ON; usart4.printf("ok!\r\n"); } if(memcmp(buffer,"led_green_off",strlen("led_green_off"))==0){ LED_GREEN_OFF; usart4.printf("ok!\r\n"); } if(memcmp(buffer,"led_blue_on",strlen("led_blue_on")) == 0){ LED_BLUE_ON; usart4.printf("ok!\r\n"); } if(memcmp(buffer,"led_blue_off",strlen("led_blue_off")) ==0){ LED_BLUE_OFF; usart4.printf("ok!\r\n"); } } } }
UART_HandleTypeDef huart4;
typedef struct __UART_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_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的接收是否结束,或者发送数据是否忙碌