HAL
溢出中断
PeriodElapsedCallback
- **一般用来点亮运行状态指示灯**
- void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
- {
- if(htim == &htim7)
- {
- static uint16_t cnt;
- cnt++;
- if(cnt>999)
- {
- cnt = 0;
- HAL_GPIO_TogglePin(D2_GPIO_Port,D2_Pin);
- }
- }
- }
复制代码
按键
按键–支持一次、多次
- **自行布置位置**
- #define KEY0_PRES 0
- #define KEY1_PRES 1
- #define K0 HAL_GPIO_ReadPin(K0_GPIO_Port,K0_Pin)
- #define K1 HAL_GPIO_ReadPin(K1_GPIO_Port,K1_Pin)
- uint8_t KEY_Scan(uint8_t mode)//0-断按 1-长按
- {
- static uint8_t key_up=1; //按键松开标志
- if(mode==1)key_up=1; //支持连按
- if(key_up&&(K0==0||K1==0))
- {
- HAL_Delay(10);
- key_up=0;
- if(K0==0) return KEY0_PRES;
- else if(K1==0) return KEY1_PRES;
- }else if(K0==1&&K1==1)key_up=1;
- return 99; //无按键按下
- }
- void Key_Proc()
- {
- static uint8_t val;
- val = KEY_Scan(0);
- if(val == 0){
- printf("K0\r\n");
- }else if(val == 1){
- printf("K1\r\n");
- }
- }
复制代码
HAL串口
串口
- main:
- 需要:include "string.h"
- if(Fu)
- {
- printf("%s",(char*)Rb);
- memset(Rb,0,sizeof(Rb));
- Fu=0;
- Rc=0;
- }
- IRQ:
- void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
- {
- if(huart==&huart1)
- {
- Rb[Rc] = Tp[0];
- Rc++;
- if(0x0a == Tp[0])
- {
- Fu = 1;
- }
- HAL_UART_Receive_IT(&huart1,(uint8_t *)Tp, Tl);
- }
- }
- .h
- #define Rl 1024 //定义最大接收字节数 200
- #define Tl 1
- extern uint8_t Rb[Rl],Rc;
- extern _Bool Fu; //接收状态标记
- extern uint8_t Tp[Tl];
- .c
- uint8_t Rb[Rl] = {0},Rc=0; //数据地址;最大容量
- _Bool Fu=0; //接收状态标记;实际容量
- uint8_t Tp[Tl] = {0}; //接收缓存数组
- 下面这句放在.c中串口的初始化函数void MX_USARTx_UART_Init(void)的用户编写区域里面:
- HAL_UART_Receive_IT(&huart1, (uint8_t *)Tp, Tl);
复制代码
HAL重定向
不使用micro-Lib
- 需要:#include "stdio.h"
- #if 1
- #pragma import(__use_no_semihosting)
- //标准库需要的支持函数
- struct __FILE
- {
- int handle;
- };
- FILE __stdout;
- //定义_sys_exit()以避免使用半主机模式
- void _sys_exit(int x)
- {
- x = x;
- }
- #endif
复制代码
HAL 串口1重定向
- #ifdef __GNUC__
- #define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
- #else
- #define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
- #endif
- PUTCHAR_PROTOTYPE
- {
- HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 0xFFFF);//注意把&huart1改为自己的stm32使用的串口号
-
- return ch;
- }
复制代码
标准库串口
串口
- main:
- 需要:include "string.h"
- if(fu)
- {
- fu = 0;
- //处理过程
- Rc= 0;
- memset(Rb,0,sizeof(Rb));
- }
- .c
- char Rb[256] = {0};
- u8 Rc = 0;
- _Bool fu;
- .h
- extern char Rb[256];
- extern u8 Rc;
- extern _Bool fu;
-
- IRQ:
- void USART1_IRQHandler(void) //串口1中断服务程序
- {
- if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) //接收中断(接收到的数据必须是0x0d 0x0a结尾)
- {
- u8 Res;
- Res = USART_ReceiveData(USART1); //读取接收到的数据
- Rb[Rc] = USART_ReceiveData(USART1);
- if(Res==0x0a)//帧尾
- {
- fu = 1;
- }
- Rc++;
- }
- }
-
复制代码
Common
字符串判断
字符串判断
- if(strstr(Rb,""Flag":1"))//判断是否存在子字符串“Flag“:1
- else if(strstr(Rb,""Flag":0"))//判断是否存在子字符串“Flag”:0
- //内部双引号需要转义
复制代码
标准库重定向
- #ifdef __GNUC__
- /* With GCC/RAISONANCE, small printf (option LD Linker->Libraries->Small printf
- set to 'Yes') calls __io_putchar() */
- #define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
- #else
- #define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
- #endif /* __GNUC__ */
-
- PUTCHAR_PROTOTYPE
- {
- /* Place your implementation of fputc here */
- /* e.g. write a character to the USART */
- USART_SendData(USART2, (uint8_t) ch);
- /* Loop until the end of transmission */
- while (USART_GetFlagStatus(USART2, USART_FLAG_TXE) == RESET)
- {}
- return ch;
- }
复制代码
————————————————
版权声明:动态比特
如有侵权请联系删除
|