
工程建立我采用了keil5进行了工程的建立,具体工程结构如图: User:存放maic.c Bsp:底层驱动的初始化与调用 MDK-ARM:存放startup.s启动文件 CMSIS:ST提供的系统C文件 Driver:Hal库文件 Doc:存放readme App:存放业务层的函数 LED驱动bsp_led.c提供了LED的驱动初始化函数: 头文件声明:
初始化函数:
主函数里面使用Hal库提供的HAL_GPIO_TogglePin()进行测试 按键驱动虽然板子上只提供了一个按键,但是本着要做就做到全部的原则,还是使用了按键FIFO,首先是初始化 头文件声明:
初始化代码:
按键的代码和LED的代码是完全一致的,不过就是加入了按键的轮询和队列的出入函数,轮询是通过systick中断实现的,每10ms轮询一次,使用FIFO保证不会丢失按键次数 按键的FIFO声明:
按键的读取函数:
通过在systick中断中轮询该函数,并且将所得数据压入FIFO队列。保证按键不丢失 systick初始化
1ms一次的systick中断 串口使用串口使用的过程中就发现了,毕竟是新时代的芯片,底层寄存器是完全不同的了,并且C0也加入了串口硬件FIFO,但是我在串口初始化中,并没有看到能够控制硬件FIFO的开关 估计是通过hal库的函数来控制的,不过暂时还没进行研究,但是这个串口的各种功能可以说是全部上齐了。 于是乎,只能依靠手册重新修改底层,以适应C0平台
不过也就是操作了一下新的中断和状态寄存器ISR(之前是状态寄存器SR),清除了发送完成标志与接收标志位,然后操作了控制寄存器1,使能了RXFNEIE RXFIFO非空中断。其他的操作与之前的HAL库初始化串口没什么区别。 需要发送的时候就将数据压入FIFO然后使能控制寄存器1的TXFNFIE TXFIFO未满中断,将数据发送,简单的代码实现如下
测试主函数大循环里面每点击一下,就发送“STM32C0 demo”,连点多次,测试完毕没有问题。 后续STM32C0虽然是入门级别的芯片,但是ST应该是把能给的功能全部给齐了,就我现在看到的串口来说,串口FIFO,自动波特率,Tx/Rx引脚互换等等主流,有用的功能全部都加入了。作为入门,能够一次性把全部功能都给玩转是非常不错的了。我甚至在手册里面发现了“互联矩阵”,属于是没有见过的新功能,等待继续探索 关于BUG因为我是直接移植了成熟的程序到C0平台,并且只做了简单的测试,还是发现了BUG,串口硬件FIFO处的操作有问题。导致上一次压入的数据如果没有发送,会和下一次的数据一起出现。最简单的方法应该是关闭硬件的FIFO,因为我自己使用了软件FIFO,但是新的平台就应该全部都尝试尝试。等待我再试试别的方法 [/i] |
STM32N6坛友评测出炉,来围观(第二波预约继续)
【STM32C0评测】C071:USB的使用
【STM32C0评测】C071:IIC的使用
NUCLEO-C071RB评测6_四种工作模式的功耗测试
【STM32C0评测】GPIO测试:使用外部中断控制小灯点亮熄灭
【STM32C0评测】+NUCLEO-C071 UART测试
NUCLEO-C071RB评测5_I2C通讯测试
【STM32C0评测】C071:加个PWM
NUCLEO-C071RB评测1_GPIO测试
【STM32C0评测】C071:GPIO+定时器+串口