以前用的比较多的是NXP的芯片或者STM的芯片,所以对这些库的函数都是比较了解的。但是这次是我第一次使用东芝的产品,也是第一次接触东芝的库函数。当打开例程的时候我是蒙蔽的,main.c文件里有很函数、程序。函数的命名都与之前接触的有所不同,函数的注释也都是英文的。所以写此文章针对于刚入门的小伙子。以下从常用函数名、程序流程介绍。
一、函数名
对于刚入门的小白写程序,了解库函数的作用是最重要的,至于库函数的功能是如何实现的,需要了解寄存器后再去学习。
main.c文件中(以GPIO例程为例):
bsp_initialize(); //对时钟、端口、中断进行初始化
application_initialize();//应用初始化,即对当前程序所需要的引脚或功能进行初始化
SystemCoreClockUpdate(); //获取系统时钟值
SysTick_Config(period );//设置中断周期,该例程为10ms中断
NVIC_EnableIRQ(SysTick_IRQn); //中断使能,即打开中断
irq_systick();//中断请求,即10ms进入一次,执行该函数里的程序
assert_failed(char *file, int32_t line);//断言,用于错误排查
GPIO.C文件中:
TXZ_Result gpio_init(gpio_t *p_obj, uint32_t group);//引脚初始化,
TXZ_Result gpio_deinit(gpio_t *p_obj, uint32_t group);//释放GPIO设置
TXZ_Result gpio_write_mode(gpio_t *p_obj, uint32_t group, uint32_t mode, uint32_t val);// 对引脚进行写入模式设置
TXZ_Result gpio_read_mode(gpio_t *p_obj, uint32_t group, uint32_t mode, uint32_t *val);// 对引脚进行读取模式设置
TXZ_Result gpio_func(gpio_t *p_obj, gpio_gr_t group, gpio_num_t num, uint32_t func,gpio_pininout_t inout);//用于端口功能切换
TXZ_Result gpio_SetPullUp(gpio_t *p_obj, gpio_gr_t group, gpio_num_t num,gpio_pinstate_t val);//设置引脚上拉
TXZ_Result gpio_SetPullDown(gpio_t *p_obj, gpio_gr_t group, gpio_num_t num,gpio_pinstate_t val);//设置引脚下拉
TXZ_Result gpio_SetOpenDrain(gpio_t *p_obj, gpio_gr_t group, gpio_num_t num,gpio_pinstate_t val);//设置引脚开漏
TXZ_Result gpio_write_bit(gpio_t *p_obj, uint32_t group, uint32_t num, uint32_t mode,uint32_t val);//引脚位写入
TXZ_Result gpio_read_bit(gpio_t *p_obj, uint32_t group, uint32_t num, uint32_t mode,gpio_pinstate_t *pinstate);//引脚位读取
ADC.C文件中:(用于数模转换)
TXZ_Result adc_init(adc_t *p_obj);//adc模块初始化
TXZ_Result adc_deinit(adc_t *p_obj);//释放adc模块
TXZ_Result adc_channel_setting(adc_t *p_obj, uint32_t ch, adc_channel_setting_t *p_setting);//adc通道设置
TXZ_Result adc_channel_clear(adc_t *p_obj, uint32_t ch);//清除adc通道设置
TXZ_Result adc_cmp_init(adc_t *p_obj, adc_cmpx_t *p_cmpx_t);//用于adc比较
TXZ_Result adc_cmp_deinit(adc_t *p_obj, adc_cmpx_t *p_cmpx_t);
TXZ_Result adc_channel_get_value(adc_t *p_obj, uint32_t ch, uint32_t *p_value);获得adc通道值
TXZ_Result adc_start(adc_t *p_obj);//adc功能开始
TXZ_Result adc_stop(adc_t *p_obj);//adc功能结束
UART.C文件中:
TXZ_Result uart_init(uart_t *p_obj);//串口模块初始化
TXZ_Result uart_deinit(uart_t *p_obj);//释放串口模块
TXZ_Result uart_discard_transmit(uart_t *p_obj);//放弃传输,即终止传输
TXZ_Result uart_discard_receive(uart_t *p_obj);//放弃接受
TXZ_Result uart_transmitIt(uart_t *p_obj, uart_transmit_t *p_info);//传输数据
TXZ_Result uart_receiveIt(uart_t *p_obj, uart_receive_t *p_info);//接受数据
void uart_transmit_irq_handler(uart_t *p_obj);//传输请求中断
void uart_receive_irq_handler(uart_t *p_obj);//接受请求中断
void uart_error_irq_handler(uart_t *p_obj);//错误中断
TXZ_Result uart_get_status(uart_t *p_obj, uint32_t *p_status);//获取此时uart模块状态
TXZ_Result uart_get_error(uart_t *p_obj, uint32_t *p_error);//获得错误信息
TXZ_Result uart_get_boudrate_setting(uint32_t clock, uart_clock_t *p_clk, uint32_t boudrate, uart_boudrate_t *p_setting);//获取波特率
二、程序执行流程
- int main(void)
- {
- uint32_t period; // Period for SYSTICK
- /*----------------------*/
- /* BSP initialize */
- /*----------------------*/
- bsp_initialize();
- /*----------------------*/
- /* Initialize */
- /*----------------------*/
- /*--- application ---*/
- if (application_initialize() != TXZ_SUCCESS)
- {
- }
- /*----------------------*/
- /* Main Processing */
- /*----------------------*/
- /* Period for 10msec SYSTICK */
- SystemCoreClockUpdate();
- period = SystemCoreClock / 100;
- if (SysTick_Config(period )) /* systick interrupt cycle setting */
- {
- }
- NVIC_EnableIRQ(SysTick_IRQn); /* systick interrupt enable */
- /* dummy loop */
- while (1){
- __NOP();
- }
- }
可款芯片有很多中断,自己可以根据程序的重要性,进行中断优先级设置。以下是中断函数:
- void irq_systick(void)
- {
- /*
- ......
- */
- }