完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
本文使用的单片机为STM32F030C8。
【示例程序代码】 注:“= {0}”语句相当于原来标准库中的GPIO_StructInit函数。 全局变量和静态局部变量默认已经清零,所以不需要写“= {0}”。而普通局部变量默认值为随机值,所以必须要写“= {0}”。 #include #include #include UART_HandleTypeDef huart1; static uint8_t uart_data; #ifdef USE_FULL_ASSERT void assert_failed(char *file, uint32_t line) { printf("%s: file %s on line %drn", __FUNCTION__, file, line); while (1); } #endif int main(void) { int i = 0; GPIO_InitTypeDef gpio = {0}; HAL_Init(); __HAL_RCC_GPIOA_CLK_ENABLE(); __HAL_RCC_USART1_CLK_ENABLE(); gpio.Alternate = GPIO_AF1_USART1; gpio.Mode = GPIO_MODE_AF_PP; gpio.Pin = GPIO_PIN_9 | GPIO_PIN_10; gpio.Pull = GPIO_NOPULL; gpio.Speed = GPIO_SPEED_FREQ_HIGH; HAL_GPIO_Init(GPIOA, &gpio); huart1.Instance = USART1; huart1.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_RXOVERRUNDISABLE_INIT; huart1.AdvancedInit.OverrunDisable = UART_ADVFEATURE_OVERRUN_DISABLE; huart1.Init.BaudRate = 115200; huart1.Init.Mode = UART_MODE_TX_RX; HAL_UART_Init(&huart1); printf("STM32F030C8 USART1n"); HAL_UART_Receive_IT(&huart1, &uart_data, 1); HAL_NVIC_EnableIRQ(USART1_IRQn); while (1) { printf("i=%dn", i); i++; HAL_Delay(1000); } } /* UART接收函数 */ void USART1_IRQHandler(void) { HAL_UART_IRQHandler(&huart1); } void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) { if (isprint(uart_data)) printf("Received: %cn", uart_data); else printf("Received: %#xn", uart_data); // 继续接收下一个字符 HAL_UART_Receive_IT(&huart1, &uart_data, 1); } /* HAL库里面的延时函数需要用到这个 */ void SysTick_Handler(void) { HAL_IncTick(); } /* 以下代码增加printf串口输出功能 (不用在项目属性中勾选Use MicroLIB) */ #pragma import(__use_no_semihosting) struct __FILE { int handle; } __stdout, __stderr; int fputc(int ch, FILE *fp) { if (fp == stdout || fp == stderr) { if (ch == 'n') HAL_UART_Transmit(&huart1, (uint8_t *)"rn", 2, HAL_MAX_DELAY); else HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, HAL_MAX_DELAY); } return ch; } void _sys_exit(int returncode) { while (1); } 【方法一】直接在Keil工程里面勾选HAL库,不用自己手动添加库文件 (1)在Keil里面新建空白工程,选择要使用的单片机 (2)然后会弹出这个窗口。在这里面选择Device下面的Startup,然后右边的下拉菜单框中必须选择Standalone。 这个窗口平时可以通过点击工具栏的绿色菱形打开。 (3)根据下方的Validation Output提示,勾选上所有的依赖项。还要选择好要用到的HAL库外设,如USART。 (4)工程建好后,就可以新建空白的main.c源文件,编写代码。 (5)代码编写好了之后,还必须要配置项目属性才能编译成功。在C/C++选项卡里面要加上USE_HAL_DRIVER。 图中的USE_FULL_ASSERT可以加,也可以不加。这个决定是否开启HAL警告输出。 (6)在Debug里面勾选Reset and Run,这样程序下载后就能自动开始运行,不用去按复位键。 【方法二】不在Manage Run-Time Environment窗口里面勾选HAL库,而是自己去网上下载HAL库的压缩包,然后手动把所有的库文件添加到工程里面 (1)建立工程时,什么都不要勾选,保证建立的是完全空白的工程。 (2)去ST的官网上下载HAL库的压缩包。 如STM32F0系列的HAL库压缩包的名称叫en.stm32cubef0.zip,下载地址是https://www.st.com/en/embedded-software/stm32cubef0.html。 (3)在工程文件夹中建立STM32F0xx_HAL_Driver文件夹。 打开压缩包,将en.stm32cubef0.zipSTM32Cube_FW_F0_V1.11.0DriversSTM32F0xx_HAL_Driver文件夹里面的Inc和Src文件夹解压到刚才建立的STM32F0xx_HAL_Driver文件夹中。 解压完后,需要将Inc文件夹中以_template结尾的头文件改名,去掉_template这个后缀。 改名后: 另外,还要把Src文件夹里面带_template的c文件都删掉。 (4)解压以下文件到STM32F0xx_HAL_Driver文件夹中: en.stm32cubef0.zipSTM32Cube_FW_F0_V1.11.0DriversCMSISDeviceSTSTM32F0xxSourceTemplatessystem_stm32f0xx.c en.stm32cubef0.zipSTM32Cube_FW_F0_V1.11.0DriversCMSISDeviceSTSTM32F0xxSourceTemplatesarmstartup_stm32f030x8.s en.stm32cubef0.zipSTM32Cube_FW_F0_V1.11.0DriversCMSISCoreInclude下的cmsis_armcc.h、cmsis_compiler.h、cmsis_version.h和core_cm0.h 这个步骤根据代码的编译情况确定。编译的时候缺什么文件,就解压什么文件。 (5)将所有的*.c文件和*.s文件都添加到工程里面去(SrcLegacy里面的不用添加)。把main.c也编写好,这次还需包含一个 (6)在项目属性中添加头文件的包含路径,并定义USE_HAL_DRIVER宏 |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1609 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1540 浏览 1 评论
970 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
681 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1587 浏览 2 评论
1861浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
644浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
515浏览 3评论
528浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
503浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-20 23:23 , Processed in 0.647755 second(s), Total 77, Slave 60 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号