====== CubeMX 建立工程 ====== ---- - 安装Java运行环境 - 安装CubeMX - 安装器件支持包 - 运行CubeMX建立和配置新工程 ====== 建立一个新工程 ====== ---- - 完成在CubeMX中完成配置,主要是器件选择和时钟配置,基本GPIO配置等。**注意在配置[SYS]模块时,Debug项要选正确的调试器** - 设定工程名称,工程路径,开发工具链等 - 生成代码(Generate Code) - 在开发环境(如在2中指定MDK)打开工程,完成编译 - 修改Option中的Debuger设置,下载到评估板上运行 ====== 通过GPIO点LED ====== ---- GPIO主要操作函数: \\ GPIO_PinState HAL_GPIO_ReadPin (GPIO_TypeDef * GPIOx,uint16_t GPIO_Pin) void HAL_GPIO_WritePin (GPIO_TypeDef * GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState) void HAL_GPIO_TogglePin (GPIO_TypeDef * GPIOx, uint16_t GPIO_Pin) 设置IO输出低电平,点亮LED1: HAL_GPIO_WritePin( LED1_GPIO_Port,LED1_Pin, (GPIO_PinState)0 ); //HAL_GPIO_TogglePin(LED0_GPIO_Port,LED0_Pin); 通过GPIO检测按键状态 HAL_GPIO_ReadPin( KEY0_GPIO_Port,KEY0_Pin ); HAL_GPIO_ReadPin( KEY1_GPIO_Port,KEY1_Pin ); ====== 使用Timer点LED ====== ---- 在CubeMX中配置好TIM,设定分频比和计数周期,自动Reload,中断Enable等。 在主函数启动定时器: HAL_TIM_Base_Start_IT(&htim3); 添加中断处理函数: void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) { if (htim->Instance == htim3.Instance) { /* Toggle LED */ HAL_GPIO_TogglePin(LED1_GPIO_Port,LED1_Pin); } } ====== 串口收发 ====== ---- 在CubeMX中配置好UART,设定波特率,中断Enable等。 发送一个消息: uint8_t aTxStartMessages[] = "\r\n****** USB Microphone ******\r\n"; HAL_UART_Transmit_IT(&huart1 ,(uint8_t*)aTxStartMessages,sizeof(aTxStartMessages)); 添加接收缓冲区: uint8_t aRxBuffer[1]; 启动接收中断: HAL_UART_Receive_IT(&huart1,aRxBuffer,1); 添加中断回调函数: void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) { if(huart->Instance == USART1) { HAL_UART_Transmit(&huart1,aRxBuffer,1,100); HAL_UART_Receive_IT(&huart1,aRxBuffer,1); } } ====== USB Audio ====== ---- 在CubeMX中配置好USB和中间件USB_DEVICE。 在描述符参数内得为usb audio class,修改PID为0x5730(否则windows驱动会加载出错) 修改工程设置,将堆大小设为4K(Heap Size : 0x4000),栈大小设为1K(Stack Size: 0x1000)。 usbd_desc.c中包定义了设备名称,操作系统的设备管理中使用了这些设备名称,可根据具体设备修改名称。也可以在CubeMX的USB_DEVUCE中间件设置中修改。 #define USBD_VID 1155 #define USBD_LANGID_STRING 1033 #define USBD_MANUFACTURER_STRING "STMicroelectronics" #define USBD_PID_FS 0x5730 #define USBD_PRODUCT_STRING_FS "Xinsi Mixing Console" #define USBD_CONFIGURATION_STRING_FS "AUDIO Config" #define USBD_INTERFACE_STRING_FS "AUDIO Interface" MX中配置完成,生成代码,编译加载到板上,连接USB电缆,Windows中就能发现硬件,安装驱动,可以见到设备安装成功。**BUT,播放不了。** **在CubeMX生成代码时,音频选择44.1k (宏USBD_AUDIO_FREQ),即44100,可以通过Windows上的Mute,播放操作,但尝试使用48k音频,会出现不能播放和静音不能控制的问题。** 详细的配置过程可参考[[http://www.eeworld.com.cn/mcu/article_2016122732669.html|USB Audio设计与实现]]。 ====== DAC ====== ---- 在CubeMX中配置好DAC的输出,选择DAC的触发源(Trigger),可选 Timer的触发输出事件,Disable波形生成模式。 配置Timer 6,Activate timer,设置Counter Period,选择 Triger Event Selection 为 Update Event 在Timer的中断回调函数中加入更新DAC值的代码。 void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) { static uint16_t dac_value = 0; if (htim->Instance == htim6.Instance) { HAL_GPIO_TogglePin(TP0_GPIO_Port,TP0_Pin); // Toggle an GPIO HAL_DAC_SetValue(&hdac, DAC_CHANNEL_1, DAC_ALIGN_12B_R, dac_value); HAL_DAC_SetValue(&hdac, DAC_CHANNEL_2, DAC_ALIGN_12B_R, 4095-dac_value); dac_value++; if( dac_value >= 4096 ) { dac_value = 0; } } } 启动DAC和Timer。 HAL_DAC_Start(&hdac, DAC_CHANNEL_1); HAL_DAC_Start(&hdac, DAC_CHANNEL_2); HAL_TIM_Base_Start_IT(&htim6); 在系统时钟:72MHz, Timer周期1500(设置周期值Counter Period = 1499),Timer中断回调的调用周期是 72000/1500 = 48(kHz),GPIO输出方波周期是24kHz. ====== 参考信息 ====== ---- - links to the most useful documents * [[http://www.st.com/stm32cubefw|Latest release]] of STM32CubeF1 Firmware package. * [[http://www.st.com/st-web-ui/static/active/en/resource/technical/document/user_manual/DM00151047.pdf|UM1847]]: Getting started with STM32CubeF1 for STM32F1 Series. * [[http://www.st.com/st-web-ui/static/active/en/resource/technical/document/user_manual/DM00154960.pdf|UM1853]]: STM32CubeF1 Nucleo demonstration firmware. * [[http://www.st.com/st-web-ui/static/active/en/resource/technical/document/user_manual/DM00154093.pdf|UM1850]]: Description of STM32F1xx HAL drivers. * [[http://www.st.com/st-web-ui/static/active/en/resource/technical/document/user_manual/DM00108129.pdf|UM1734]]: STM32Cube USB Device library. * [[http://www.st.com/st-web-ui/static/active/en/resource/technical/document/user_manual/DM00105256.pdf|UM1720]]: STM32Cube USB host library. * [[http://www.st.com/st-web-ui/static/active/en/resource/technical/document/user_manual/DM00105259.pdf|UM1721]]: Developing Applications on STM32Cube with FatFs. * [[http://www.st.com/st-web-ui/static/active/en/resource/technical/document/user_manual/DM00105262.pdf|UM1722]]: Developing Applications on STM32Cube with RTOS. * [[http://www.st.com/st-web-ui/static/active/en/resource/technical/document/user_manual/DM00103685.pdf|UM1713]]: Developing applications on STM32Cube with LwIP TCP/IP stack. * [[http://www.st.com/st-web-ui/static/active/en/resource/technical/document/user_manual/DM00103145.pdf|UM1709]]: STM32Cube Ethernet IAP example. * [[https://blog.csdn.net/wangjianzhongfj/article/details/72861557|USB Audio设计与实现]]: 基于STM32F4 Discovery板的工程样例