【可能是东半球最好的stm32入门教学】第0章 课程简介

不知道有多少小伙伴在学习stm32嵌入式时,看过X原子,X火的教学视频。他们的视频虽然对于知识点的讲解面面俱到,但是对于初学者来说,太深入的教程无异于是一种负担,经常学的一头雾水,而且到最后看似学会了很多知识点,但是却没有任何工程能力。作者我当初在学习stm32时,就是在经历了无数次坚持到放弃再重新拾起的过程,才勉强把课程学完。想想也是一段非常痛苦的回忆。

为了不让后来的同学在学习道路上遇到这些困难,我们的课程做了精心的设计。

  • 真正简单快速的入门
    不拖泥带水,一次性将清楚原理与功能
  • 注重培养良好的编程习惯
    在教程中穿插讲解工作中十分受用的良好编程习惯
  • 通俗易懂的比喻
    将复杂的原理用生活中的例子来比喻,帮助快速理解并应用
  • 项目带做
    带着大家就每节课学到的知识及时的结合常见的传感器,提升工程能力。

下面是课程的链接,不断更新中。
第一节 环境配置

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
以下是一个简单的示例代码,用于连接STM32F103C8T6和EC01G,并使用AT指令获取GPS位置并解析数据: ```c #include "stm32f10x.h" #include <stdio.h> #include <string.h> #define GPS_BUFFER_LEN 256 char GPS_Buffer[GPS_BUFFER_LEN]; uint16_t GPS_Buffer_Index = 0; void USART1_IRQHandler(void) { if (USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) { char ch = USART_ReceiveData(USART1); if (GPS_Buffer_Index < GPS_BUFFER_LEN - 1) { GPS_Buffer[GPS_Buffer_Index++] = ch; } if (ch == '\n') { GPS_Buffer[GPS_Buffer_Index] = '\0'; // 解析GPS数据 if (strstr(GPS_Buffer, "$GPGGA")) { char* p = strtok(GPS_Buffer, ","); int i = 0; while (p != NULL) { switch (i++) { case 2: // 纬度 { float lat = atof(p + 2) / 60.0f + atof(p) * 100.0f / 60.0f; printf("Latitude: %.6f\r\n", lat); break; } case 3: // 纬度半球 { printf("Latitude direction: %c\r\n", *p); break; } case 4: // 经度 { float lon = atof(p + 3) / 60.0f + atof(p) * 100.0f / 60.0f; printf("Longitude: %.6f\r\n", lon); break; } case 5: // 经度半球 { printf("Longitude direction: %c\r\n", *p); break; } case 6: // GPS状态 { printf("GPS status: %c\r\n", *p); break; } } p = strtok(NULL, ","); } } GPS_Buffer_Index = 0; } } } void USART1_Init(void) { GPIO_InitTypeDef GPIO_InitStructure; USART_InitTypeDef USART_InitStructure; NVIC_InitTypeDef NVIC_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_Init(GPIOA, &GPIO_InitStructure); USART_InitStructure.USART_BaudRate = 9600; USART_InitStructure.USART_WordLength = USART_WordLength_8b; USART_InitStructure.USART_StopBits = USART_StopBits_1; USART_InitStructure.USART_Parity = USART_Parity_No; USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; USART_Init(USART1, &USART_InitStructure); NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); USART_ITConfig(USART1, USART_IT_RXNE, ENABLE); USART_Cmd(USART1, ENABLE); } void EC01G_Send_AT_Command(char* command) { while (*command) { USART_SendData(USART1, *command++); while (USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET); } USART_SendData(USART1, '\r'); while (USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET); USART_SendData(USART1, '\n'); while (USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET); } void EC01G_Init(void) { EC01G_Send_AT_Command("AT+CGNSPWR=1"); EC01G_Send_AT_Command("AT+CGNSSEQ=\"RMC\""); EC01G_Send_AT_Command("AT+CGNSTST=1"); } int main(void) { USART1_Init(); EC01G_Init(); while (1) { // 定期发送AT指令获取GPS位置 EC01G_Send_AT_Command("AT+CGNSINF"); delay_ms(1000); } } ``` 注意,这只是一个示例代码,可能需要根据你的具体硬件和需求进行修改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值