#include"main.h" const uint32_t SEG_SegPins[]= { GPIO_PIN_0,GPIO_PIN_1,GPIO_PIN_2,GPIO_PIN_3,GPIO_PIN_4,GPIO_PIN_5,GPIO_PIN_6,GPIO_PIN_7, }; const uint32_t SEG_DigPins[]= { GPIO_PIN_8,GPIO_PIN_9,GPIO_PIN_10,GPIO_PIN_11, }; void Seg_Init(void); void Seg_DisplaySingleDigit(uint8_t n); void Seg_DynamicScan(uint8_t n1,uint8_t n2,uint8_t n3,uint8_t n4); int main(void) { uint32_t tsStart; uint32_t counter=0; uint8_t n1,n2,n3,n4; HAL_Init(); Seg_Init(); while(1) { tsStart=HAL_GetTick(); n1=(counter/1000)%10; n2=(counter/100)%10; n3=(counter/10)%10; n4=counter%10; while(HAL_GetTick()-tsStart >=1000) { Seg_DynamicScan(n1,n2,n3,n4); } counter++; } } void Seg_Init(void) { GPIO_InitTypeDef gpioinit; uint32_t i; //1.初始化数码管的段选引脚 gpioinit.Mode=GPIO_MODE_OUTPUT_PP; gpioinit.Speed=GPIO_SPEED_FREQ_LOW; __HAL_RCC_GPIOA_CLK_ENABLE(); for(i=0;i<8;i++) { gpioinit.Pin=SEG_SegPins[i]; HAL_GPIO_WritePin(GPIOA,SEG_SegPins[i],GPIO_PIN_RESET); HAL_GPIO_Init(GPIOA,&gpioinit); } //2.初始化数码管的位选引脚 gpioinit.Mode=GPIO_MODE_OUTPUT_PP; gpioinit.Speed=GPIO_SPEED_FREQ_LOW; __HAL_RCC_GPIOA_CLK_ENABLE(); for(i=0;i<4;i++) { gpioinit.Pin=SEG_DigPins[i]; HAL_GPIO_WritePin(GPIOA,SEG_DigPins[i],GPIO_PIN_SET); HAL_GPIO_Init(GPIOA,&gpioinit); } } void Seg_DisplaySingleDigit(uint8_t n) { const uint8_t font[]= { 0x3f,0x06,0x5B,0x4F,0x66,0x6D,0X7D,0X07,0X7F,0X6F }; uint32_t i; for(i=0;i<8;i++) { if((font[n] & (0x1 << i))!=0) { HAL_GPIO_WritePin(GPIOA,SEG_SegPins [i],GPIO_PIN_SET); } else { HAL_GPIO_WritePin(GPIOA,SEG_SegPins [i],GPIO_PIN_RESET); } } } void Seg_DynamicScan(uint8_t n1,uint8_t n2,uint8_t n3,uint8_t n4) { uint32_t i, j; uint8_t numbers[4]; numbers[0]=n1; numbers[1]=n2; numbers[2]=n3; numbers[3]=n4; for(i=0;i<4;i++) { for(j=0;j<4;j++) { HAL_GPIO_WritePin(GPIOA,SEG_DigPins[j],GPIO_PIN_SET); } Seg_DisplaySingleDigit(numbers[i]); HAL_GPIO_WritePin(GPIOA,SEG_DigPins[i],GPIO_PIN_RESET); HAL_Delay(10); } } |
请问一下,我的nucleo板子连接usb线,找不到target,一直无法下载程序怎么回事呢?
STM32硬件IIC
L9663驱动开发
STM32F103单片机串口引脚为何冲突?
STM32F103ZET6 引脚顺序,芯片有两个圈圈,第1脚以哪个圈圈为准呢?
擦FLASH时如何才能使中断正常运行呢?
关于STM32F103标准库中tim.c文件中关于TI1_Config与TI2_Config函数中有关参数注释说明与手册不一致的疑问,希望大家帮忙解答下!!!!
ADC 是不是 不可超過4個 ADC_InjectedSequencerLengthConfig(ADC1,4);
STM32 ST-LINK Utility 中开启读保护与在程序中开启RDP的区别是?
如何快速移植stm32f1的程序到STM32C0中?
共阴的,所有的比划都点亮了是正常的,A0-A7接的8个段选引脚。A8-A11接的4个位选引脚。
所有的比划都点亮了是正常的,A0-A7接的8个段选引脚。A8-A11接的4个位选引脚。共阴的。
延时那部分检查下。
能帮检查指导下吗?我检查了好几遍没有发现问题
{
tsStart=HAL_GetTick();
n1=(counter/1000)%10;
n2=(counter/100)%10;
n3=(counter/10)%10;
n4=counter%10;
while(HAL_GetTick()-tsStart >=1000)
{
Seg_DynamicScan(n1,n2,n3,n4);
}
counter++;
}
红色部分能执行??????
先获取滴答定时器当前的时间是多少多少毫秒减去一刚开头记时的时间,如果这两个时间的差值大于1000的话。也就表示我刚开始计时到本次的时候,时间已经过去了1s。然后等完一秒后,我的counter自动加1。while循环里面就是用来做的刷新。